由于 EndpointDispatcher 上的 ContractFilter 不匹配,带有 Action ” 的消息无法在接收方处理

Kih*_*ats 4 java spring soap

调用 Web 服务时收到此错误消息:-

org.springframework.ws.soap.client.SoapFaultClientException:由于 EndpointDispatcher 上的 ContractFilter 不匹配,无法在接收方处理带有 Action '' 的消息。这可能是因为合同不匹配(发送者和接收者之间的操作不匹配)或发送者和接收者之间的绑定/安全不匹配。检查发送方和接收方是否具有相同的合同和相同的绑定(包括安全要求,例如消息、传输、无)。

Kih*_*ats 12

您忘记在调用 Web 服务之前指定 SOAP 操作。打开 WSDL 文件并搜索您尝试调用的操作。你应该看到这样的东西:

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions ...>
...
<wsdl:binding ...>
    ...
    <wsdl:operation name="OhMyGawd">
        <soap:operation soapAction="http://oh.my.gawd"/>
        ...
    </wsdl:operation>
</wsdl:binding>
...
Run Code Online (Sandbox Code Playgroud)

记下该soapAction值,在本例中为http://oh.my.gawd

如果您使用 Spring Web 服务,请添加以下行:

@Autowired
private WebServiceTemplate webServiceTemplate;

public void run() {
   ObjectFactory objectFactory = new ObjectFactory();

   // Create the request payload
   OhMyGawd ohMyGawd = objectFactory.createOhMyGawd();
   ohMyGawd.setValue(...);

   OhMyGawdResponse response = (OhMyGawdResponse) webServiceTemplate.marshalSendAndReceive(
        ohMyGawd, 
        new SoapActionCallback("http://oh.my.gawd")
);

...
Run Code Online (Sandbox Code Playgroud)

}

注意:归功于此网站https://myshittycode.come