【问题标题】:WSO2 ESB - WS Proxy error "EPR for Operation not found" when SOAPAction = ""WSO2 ESB - SOAPAction =“”时,WS 代理错误“未找到操作的 EPR”
【发布时间】:2017-06-12 20:19:55
【问题描述】:

我们收到此错误:

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

我们的 SOAPAction 被声明为“”,这是规范所允许的。

以下答案解释了它发生的原因:https://stackoverflow.com/a/15556669/1553243。但是,我们无法承受建议的解决方法 1 和 3。我们不能让我们的供应商声明他们的 SOAPAction,我们也不能让我们的客户总是附加操作名称。当 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>

【问题讨论】:

    标签: wso2 wso2esb


    【解决方案1】:

    从 ESB v4.8 开始,使用直通 http 传输,您可以将此参数添加到您的代理定义中:

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

    【讨论】:

      【解决方案2】:

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

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

      这将生成带有定义为 SOAP Action 的 WSDL

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

      这样应该可以解决问题

      【讨论】:

        【解决方案3】:

        那么您可以在 ESB 级别进行控制吗?如果是这样,则在 ESB 级别定义 SOAPAction 属性。 也就是说,当请求命中序列时,如果您确定将请求路由到哪里,则在发送中介之前设置 SOAPAction 属性

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

        【讨论】:

        • 是的,我有。我已经尝试将 SOAPAction 定义为标头和 inSequence 的属性,但我无法让它工作。在我们的例子中,SOAPAction 必须作为“”发送,因为这是目标 ws 所期望的值。我们不断收到此错误。
        【解决方案4】:

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

        options.setAction("urn:SOAPAction");
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-01-06
          • 2013-08-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多