我使用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
我不知道我想念什么。 我该怎么解决?
答案 0 :(得分:1)
向XxxServiceImpl类添加新方法时,始终必须重建服务。
ServiceBuilder将正确的内容注入父类等,以确保该方法已注册并可用于远程API调用。
答案 1 :(得分:1)
这在某种程度上与Java版本有关。尝试使用Java8构建和部署服务。经过2天的研究,它对我有用。
我认为的问题是 Liferay正在使用jodd.asm5(检查您的异常跟踪的第一行),我检查了Jodd站点https://jodd.org/download/,在Java 8之后他们不支持它。不确定Liferay如何使用它。
答案 2 :(得分:1)
感谢您的回答@Dhruv Pandey!您保存了我的一天(或几天)。
顺便说一句,我想指出的是,即使在您发布的Jodd链接中,他们也会说:“ Jodd可以在存在合适的Java 8运行时环境的任何平台上使用。” 这并不意味着我们不能在运行于Java 11的服务器上使用它。
这里重要的是,我们部署的工件将目标运行时环境设置为Java 8,否则我们将获得异常。
因此,我正在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>
此后,错误消失了。