【问题标题】:Call a service in WSO2 DSS from WSO2 ESB从 WSO2 ESB 调用 WSO2 DSS 中的服务
【发布时间】:2017-12-11 11:49:47
【问题描述】:

我正在尝试从 WSO2 ESB 中的服务 B 向 WSO2 DSS 中的服务 A 发送消息。我使用 JAX-WS 生成了一个客户端,可以直接访问 A 来自 Java 代码,但是当我将相同的代码导出为 Axis2 服务并将其放入 ESB 时,我收到以下错误:

[2017-03-31 08:30:54,110] ERROR - RPCMessageReceiver     org.wso2.carbon.core.services.echo.Echo.getEchoHttpSoap12Endpoint()Lorg/wso2/carbon/core/services/echo/EchoPortType;
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.axis2.rpc.receivers.RPCUtil.invokeServiceClass(RPCUtil.java:212)
at org.apache.axis2.rpc.receivers.RPCMessageReceiver.invokeBusinessLogic(RPCMessageReceiver.java:117)
at org.apache.axis2.receivers.AbstractInOutMessageReceiver.invokeBusinessLogic(AbstractInOutMessageReceiver.java:40)
at org.apache.axis2.receivers.AbstractMessageReceiver.receive(AbstractMessageReceiver.java:110)
at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
at org.apache.synapse.transport.passthru.ServerWorker.processEntityEnclosingRequest(ServerWorker.java:395)
at org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:142)
at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NoSuchMethodError: org.wso2.carbon.core.services.echo.Echo.getEchoHttpSoap12Endpoint()Lorg/wso2/carbon/core/services/echo/EchoPortType;
at service.ChangeName.echoString(ChangeName.java:27)
at service.ChangeName.changeName(ChangeName.java:34)
... 15 more
[2017-03-31 08:30:54,126] ERROR - ServerWorker Error processing POST request for : /services/ChangeName.ChangeNameHttpSoap12Endpoint
org.apache.axis2.AxisFault: org.wso2.carbon.core.services.echo.Echo.getEchoHttpSoap12Endpoint()Lorg/wso2/carbon/core/services/echo/EchoPortType;
at org.apache.axis2.rpc.receivers.RPCMessageReceiver.invokeBusinessLogic(RPCMessageReceiver.java:208)
at org.apache.axis2.receivers.AbstractInOutMessageReceiver.invokeBusinessLogic(AbstractInOutMessageReceiver.java:40)
at org.apache.axis2.receivers.AbstractMessageReceiver.receive(AbstractMessageReceiver.java:110)
at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
at org.apache.synapse.transport.passthru.ServerWorker.processEntityEnclosingRequest(ServerWorker.java:395)
at org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:142)
at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.axis2.rpc.receivers.RPCUtil.invokeServiceClass(RPCUtil.java:212)
at org.apache.axis2.rpc.receivers.RPCMessageReceiver.invokeBusinessLogic(RPCMessageReceiver.java:117)
... 9 more
Caused by: java.lang.NoSuchMethodError: org.wso2.carbon.core.services.echo.Echo.getEchoHttpSoap12Endpoint()Lorg/wso2/carbon/core/services/echo/EchoPortType;
at service.ChangeName.echoString(ChangeName.java:27)
at service.ChangeName.changeName(ChangeName.java:34)
... 15 more

这是在 ESB 之外工作的代码:

public static String echoString(java.lang.String in) {
    Echo service = Echo();
    EchoPortType port = service.getEchoHttpSoap12Endpoint(); <-- ERROR HERE
    BindingProvider bp = (BindingProvider)port;
    bp.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,LOCAL_ENDPOINT);
    return port.echoString(in);
}

有解决此问题的建议吗?

【问题讨论】:

  • “当我将相同的代码导出为 Axis2 服务并将其放入 ESB 时”究竟是什么意思?因为您可以直接从突触代理调用您的 DSS 服务,所以我看不出这样做的意义(当然,除了测试之外)。无论如何,错误似乎指向您生成的客户端中缺少的类。您在 ESB 中的哪个位置安装了它?

标签: wso2 wso2esb wso2dss


【解决方案1】:

如果你使用生成的客户端作为“jar依赖”,你需要把这个jar放到文件夹src/main/resources/lib 或者将你的 jar 放到 wso2esb 的“dropins”文件夹中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多