当前位置: 首页 > 知识库问答 >
问题:

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

东方淇
2023-03-14

我试图在Liferay-7Portlet中使用ApacheCXF Web服务,在linux环境中出现以下错误。

13:39:14374错误[http-nio-4080-exec-9][status_jsp:950]com。利弗雷。门户。内核portlet。PortletContainerException:com。利弗雷。门户。内核portlet。PortletContainerException:javax。servlet。ServletException:java。lang.LinkageError:com/sun/org/apache/xpath/internal/jaxp/XPathImpl

如果我运行相同的portlet在增殖7窗口环境它是工作正常

这里是示例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(endpoint);

下面是我们正在使用的依赖项

==============================

cxf-core-3.1.8.jar

cxf-rt-bindings-soap-3.1.8。罐子

cxf-rt-databinding-jaxb-3.1.8。罐子

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。罐子

尼西-3.0.3。罐子

==============================

我在Liferay 6.2中检查了相同的代码,它在windows和linux环境中都可以正常工作,但我添加了一些jar文件。

==============================

cxf-rt-bindings-xml-3.1.8。罐子

cxf-rt-ws-addr-3.1.8。罐子

cxf-rt-ws-policy-3.1.8。罐子

jaxb-impl-2.2.11.jar

jaxb-core-2.2.11。罐子

xmlschema-core-2.2.1。罐子

stax2-api-3.1.4。罐子

woodstox-core-asl-4.4.1。罐子

wsdl4j-1.6.3。罐子

==============================

请帮帮我。

谢谢

P. V. B. Raju

共有2个答案

祖迪
2023-03-14

我的方法不同。我在Liferay实例上安装了必要的Apache CXF模块作为OSGi捆绑包,然后使用导出到OSGi容器的CXF API构建了一个简单的WS-client。作为OSGIi捆绑包安装的Apache CXF模块。

  • Apache XmlSchema Core(v.2.2.1)
  • Apache CXF Core
  • Apache CXF运行时JAXB数据绑定
  • Apache CXF运行时XML绑定
  • Apache CXF运行时SOAP绑定
  • 用于WSDL的Apache CXF运行时核心
  • Apache CXF运行时简单前端
  • Apache CXF运行时JAX-WS前端
  • Apache CXF运行时HTTP传输

Apache CXF框架的九个元素的安装可以通过telnet连接到Apache Felix GoGo Shell来完成。Liferay 7门户运行后,可以通过执行安装$URL_CXF_BUNDLE命令来安装Apache CXF框架

有关更多信息,您可以阅读这篇文章Liferay 7:实现OSGi Style中的客户端SOAP con Apache CXF

李意致
2023-03-14

我尝试过战争方法,效果很好。我在Liferay 7 DXP FP 32上进行了测试。

查看我的测试代码。https://github.com/mir333/cxf-test-demo

jar方法有点棘手,因为您需要在Gradle和bnd文件中列出所有必要的库。基本上,war file lib文件夹中的所有内容都需要插入到那里,如果你仍然得到一个丢失的导入消息,你需要找到一个提供包的lib并添加它。

看看这篇博文,它解释了如何做,它指的是另一篇博文,也看看它。https://web.liferay.com/web/sushil.patidar/blog/-/blogs/liferay-osgi-module-project-dependency-resolution

编辑:新工具可用于此。看看https://dev.liferay.com/develop/tutorials/-/knowledge_base/7-0/adding-third-party-libraries-to-a-module#embedding-使用gradle的库确保使用了正确的gradle插件。

 类似资料:
  • 我的在live server上类似这样的环境文件设置。但当我在的时候 错误是 我使用这个主机和密码通过putty访问我的sshhttp://5.100.156.10:2082我很困惑。

  • 我目前正在使用Wink 1.1.1和Spring 3.1.2将Java应用程序从WAS 7迁移到WAS 8.5.5。我正在尝试使用WAS8.5中提供的本机Wink集成,而不是使用目前WAS7中单独的Wink jar。 我得到了一个错误的服务器启动,看起来像这样: 造成原因:java.io.FileNotFound异常:类路径资源[META-INF/server/wink-core-context.

  • 我试图通过spring工具套件和maven访问soap Web服务。 我已经使用https://spring.io/guides/gs/consuming-web-service/的源代码做到了这一点。 依赖性是 插件是 现在,我已将url更改为带有https的新链接: 我可以从浏览器访问wsdl。 我发现了错误 "执行默认目标org.jvnet.jaxb2.maven2:maven-jaxb2-

  • 我正在尝试使用installCert获取服务器ssl证书。JAVA 在下面的链接 https://github.com/escline/InstallCert/blob/master/InstallCert.java 我可以得到一些服务器的服务器证书,但在尝试获得一些服务器证书时,我得到了下面的错误 sun.security.validator.校验异常:PKIX路径构建失败:sun.securi

  • 我正在尝试将OpenGL与Qt一起使用。我正在遵循这个示例:http://qt-project.org/doc/qt-5.0/qtgui/openglwindow.html使用Qt 5 build for msvc2012。最后我得到了以下错误: 错误LNK2019:未解析的外部符号_imp_glClear@4在函数“public:virtual void _uthiscall OpenGLWin

  • 我在从arm组件调用c函数时遇到问题。反之亦然。Arch是cortex-m3,董事会到期。编译器是gcc。 以下是汇编代码: 这里是c代码: 我得到的错误是- 小样本。S.o:在函数my_c_add'collect2:ld的引用返回1退出状态 下面是我用来链接的命令- arm-none-eabi-g-O3-Wl,--gc切片-mcpu=cortex-m3-T闪光。ld-Wl,-Map,mapfil