WSO2 ESB - 当SOAPAction =“”时,WS代理错误“未找到操作的EPR”

时间:2014-05-07 16:22:57

标签: wso2 wso2esb

我们收到此错误:

未找到操作的端点引用(EPR)是[OUR ENDPOINT]和WSA Action =。如果以前可以访问此EPR,请与服务器管理员联系。

我们的SOAPActions被声明为“”,如规范允许的那样。

以下答案解释了为什么会发生这种情况:https://stackoverflow.com/a/15556669/1553243。但是,我们无法提供建议的解决方法,1和3.我们无法让我们的供应商声明他们的SOAPActions,并且我们无法让客户端始终附加操作名称。当SOAPAction =“”时,解决方法2也不起作用。

答案还说明他们正在修复这个限制,但是我使用了一年后的版本而没有任何内容。

还有其他解决方法吗?

我们的代理定义如下:

<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
       name="TEST"
       transports="https,http"
       statistics="enable"
       trace="enable"
       startOnLoad="true">
   <target>
      <inSequence>
      </inSequence>
      <outSequence>
         <send/>
      </outSequence>
      <faultSequence>
         <log/>
      </faultSequence>
      <endpoint>
         <wsdl service="TESTService"
               port="TESTServicePort"
               uri="http://localhost:8080/test?wsdl"/>
      </endpoint>
   </target>
   <publishWSDL uri="http://localhost:8080/test?wsdl"/>
   <description/>
</proxy>

4 个答案:

答案 0 :(得分:1)

在您的webservice实现类中添加注释@WebMethod以定义各个操作的SOAP Action。例如

@WebService
@SOAPBinding(style=Style.RPC)
public class BookingServiceWS {
    @WebMethod(action="getBooking",operationName="getBooking")
    public BookingServiceResponse getBooking(String pnr){
}

这将生成WSDL,其SOAP SOAP定义为

<operation name="getBooking">
<soap:operation soapAction="getBooking"/>
<input>...</input>
<output>...</output>
</operation>

这应该可以解决问题

答案 1 :(得分:1)

从ESB v4.8开始,使用传递http传输,您可以将此参数添加到您的代理def:

<parameter name="disableOperationValidation" locked="false">true</parameter>

答案 2 :(得分:0)

然后你可以控制ESB级别?如果是这样,则在ESB级别定义SOAPAction属性。 也就是说,当请求命中序列时,如果您确定在何处路由请求,那么在发送中介之前设置SOAPAction属性

   <property name="SOAPAction" value="urn:OPERATION NAME"
 scope="transport"/>

答案 3 :(得分:0)

解决方法2:您可以在客户端代码中指定SOAPAction。在选项中指定它,如下所示。

options.setAction("urn:SOAPAction");