我试图在Liferay-7 portlet中使用apache服务,在linux环境中我得到了以下错误。
13:39:14,374错误http-nio-4080-exec-9 com.liferay.portal.kernel.portlet.PortletContainerException: com.liferay.portal.kernel.portlet.PortletContainerException: javax.servlet.ServletException: java.lang.LinkageError: com/sun/org/apache/xpath/internal/jaxp/XPathImpl
如果我在救生筏7 windows环境中运行相同的portlet,那么它运行得很好。
下面是示例jsp代码(view.jsp)
<portlet:defineObjects />
<%@ page import="org.apache.cxf.endpoint.Client" %>
<%@ page import="org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory" %>
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<%
String endpoint="http://*******/***-ws/soap/login?wsdl";
String method ="login";
String uname ="admin";
String pwd = "admin";
String result = "";
Object[] params = new Object[2] ;
params[0] = (Object)uname;
params[1] = (Object)pwd;
result = call(endpoint, method, params);
System.out.println("Result : "+result);
%>
<%!
public static String call(String endpoint, String method, Object[] params) {
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
try {
Client client = dcf.createClient(endpoint);
System.out.println("Client Object Create successfully :");
Object[] returnVals = client.invoke(method, params);
//extract returned value. getting 1st value as sakai ws calls returns only one value.
if(returnVals!=null && returnVals.length>0)
return (String)returnVals[0];
}
catch (Exception e) {
e.printStackTrace();
System.out.println("A connection error occurred: " + e.getClass() + ": " + e.getMessage());
}
return null;
}
%>问题发生在Client =dcf.createClient(端点);上
下面是我们使用的依赖项
==============================
cxf-core-3.1.8.jar
cxf-rt-bindings-soap-3.1.8.jar
cxf-rt-databinding-jaxb-3.1.8.jar
cxf-rt-frontend-jaxws-3.1.8.jar
cxf-rt-frontend-simple-3.1.8.jar
cxf-rt-transports-http-3.1.8.jar
cxf-rt-wsdl-3.1.8.jar
neethi-3.0.3.jar
==============================
与我在Liferay6.2中签过的代码相同,它在windows和linux环境中运行良好,但我添加了一些更多的jar文件。
==============================
cxf-rt-bindings-xml-3.1.8.jar
cxf-rt-ws-addr-3.1.8.jar
cxf-rt-ws-policy-3.1.8.jar
jaxb-impl-2.2.11.jar
jaxb-core-2.2.11.jar
xmlschema-core-2.2.1.jar
stax2-api-3.1.4.jar
woodstox-core-asl-4.4.1.jar
wsdl4j-1.6.3.jar
==============================
请帮帮我。
感谢和问候,
P.V.B.Raju。
发布于 2017-11-12 17:27:59
我尝试过战争的方法,效果很好。我在Liferay 7 DXP FP 32上进行了测试。
看看我的测试代码。https://github.com/mir333/cxf-test-demo
jar方法有点棘手,因为您需要在Gradle和bnd文件中列出所有必需的库。基本上,war文件lib文件夹中的所有内容都需要插入其中,如果仍然缺少导入消息,则需要找到提供包并将其添加的lib。
看看这篇博文,它解释了怎么做,它引用了另一篇博文,也看了一下。https://web.liferay.com/web/sushil.patidar/blog/-/blogs/liferay-osgi-module-project-dependency-resolution
编辑:新工具可用于此。看看base/7-0/adding-third-party-libraries-to-a-module#embedding-libraries-using-gradle,确保你在正确的Gradle插件上。
发布于 2018-02-13 22:01:29
我的方法不一样。我在Liferay实例上安装了必要的Apache模块作为OSGi包,之后我使用导出到OSGi容器的CXF构建了一个简单的WS客户机。Apache模块作为OSGIi包安装。
安装Apache框架的九个元素可以通过telnet连接到Apache Shell。一旦Liferay 7门户运行,就可以通过执行安装$URL_CXF_BUNDLE命令来安装Apache框架。
有关更多信息,请阅读本文Liferay 7:以OSGi风格实现CXF
https://stackoverflow.com/questions/47089482
复制相似问题