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>
在那之后,错误就消失了。