Liferay Json Web服务参数输入



I用户Liferay 6.2我用Service Builder创建了一个实体(notizia(。

我生成了Web服务。我有一种方法可以打印这样的字符串:

public class notiziaServiceImpl extends notiziaServiceBaseImpl {
@Override
@AccessControlled(guestAccessEnabled=true)
public String printMyString()
{
return "i'm the string ";
}
}

它有效!我添加了另一种输入参数的方法

@AccessControlled(guestAccessEnabled=true)  
public String getHelloWorld(String worldName) 
throws com.liferay.portal.kernel.exception.PortalException,
com.liferay.portal.kernel.exception.SystemException {
return "Hello world: " + worldName;
}

"getHelloWorld"方法不起作用。我在控制台中得到了这个错误:

[MethodParametersResolverImpl:59] java.lang.IllegalArgumentException
java.lang.IllegalArgumentException

我不知道我想念什么。我该怎么解决?

当您向XxxServiceImpl类添加新方法时,您总是需要重新生成服务。

ServiceBuilder将正确的东西注入父类等,以确保该方法已注册并可用于远程API调用。

这在某种程度上与Java版本有关。尝试使用Java8来构建和部署您的服务。经过两天的研究,它对我有效。

我认为问题是Liferay正在使用jodd.asm5(检查异常跟踪的第一行(,我检查了jodd站点https://jodd.org/download/并且在Java 8之后他们不支持它。不确定Liferay是如何使用它的。

谢谢你的回答@Dhruv Pandey!你救了我一天。

顺便说一句,我想指出的是,即使在你发布的Jodd链接中,他们说:"Jodd可以在任何有合适Java 8运行时环境的平台上使用。"这并不意味着我们不能在运行Java 11的服务器中使用它。

这里重要的是,我们部署的工件的目标运行时环境设置为Java8,否则我们将得到异常。

因此,我在Java 11中运行了一个Liferay 7.2实例,并在我的服务pom.xml的构建插件中进行了此配置:

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>11</target>
</configuration>
</plugin>
...
</plugins>
<build>

这是在抛出错误。我所做的是将配置更改为以下内容:

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
...
</plugins>
<build>

在那之后,错误就消失了。

最新更新