首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Liferay 7中使用apache-cxf Web服务时的链接错误

在Liferay 7中使用apache-cxf Web服务时的链接错误
EN

Stack Overflow用户
提问于 2017-11-03 06:09:37
回答 2查看 903关注 0票数 2

我试图在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)

代码语言:javascript
复制
<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。

EN

回答 2

Stack Overflow用户

发布于 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插件上。

票数 1
EN

Stack Overflow用户

发布于 2018-02-13 22:01:29

我的方法不一样。我在Liferay实例上安装了必要的Apache模块作为OSGi包,之后我使用导出到OSGi容器的CXF构建了一个简单的WS客户机。Apache模块作为OSGIi包安装。

  • Apache XmlSchema核心(v.2.2.1)
  • Apache核心
  • Apache运行时JAXB DataBinding
  • Apache运行时XML绑定
  • Apache运行时SOAP绑定
  • Apache运行时WSDL内核
  • Apache运行时简单前端
  • Apache运行时JAX前端
  • Apache运行时HTTP传输

安装Apache框架的九个元素可以通过telnet连接到Apache Shell。一旦Liferay 7门户运行,就可以通过执行安装$URL_CXF_BUNDLE命令来安装Apache框架。

有关更多信息,请阅读本文Liferay 7:以OSGi风格实现CXF

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47089482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档