我们收到此错误:
未找到操作的端点引用(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>
答案 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");