gpt4 book ai didi

linux - 在 Liferay 7 中使用 apache-cxf Web 服务时出现链接错误

转载 作者:太空狗 更新时间:2023-10-29 12:10:25 25 4
gpt4 key购买 nike

我试图在 Liferay-7 portlet 中使用 apache-cxf Web 服务,我在 linux 环境中遇到以下错误。

13:39:14,374 错误 [http-nio-4080-exec-9][status_jsp:950] 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

如果我在 liferay 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 client = dcf.createClient(endpoint);

这是我们正在使用的依赖项

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

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

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

我在 Liferay 6.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.

最佳答案

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

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

jar 方法有点棘手,因为您需要在 Gradle 和 bnd 文件中列出所有必需的库。基本上,war 文件 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-libraries-using-gradle确保您使用的是正确的 Gradle 插件。

关于linux - 在 Liferay 7 中使用 apache-cxf Web 服务时出现链接错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47089482/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com