1

JAX-WS 2.1.7 を使用して古い Web サービスのソース コードを生成しました。このサービスを呼び出すと、生成される SOAP メッセージは次のようになります。

<env:Envelope xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'>
  <env:Header>
  </env:Header>
  <env:Body>
      ...
  </env:Body>
</env:Envelope>

ただし、古い Web サービスは次の形式のみを受け入れます。

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    ...
  </soap:Body>
</soap:Envelope>

ご覧のとおり、プレフィックスは「env」ではなく「soap」であり、ヘッダーがないため、「soap:Body」が必要であるというエラーが発生しました。古い W​​eb サービスを変更できず、互換性のある SOAP メッセージを送信する必要があります。プレフィックスを「soap」に変更し、「ヘッダー」も削除するにはどうすればよいですか?

4

1 に答える 1

5

You need to create a class that implements SOAPHandler<SOAPMessageContext> and that includes something like this:

  public boolean handleMessage(final SOAPMessageContext context)
  {
    final Boolean isSoapResponse = (Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
    if (!isSoapResponse)
    {
      try
      {
        final SOAPMessage soapMsg = context.getMessage();
        soapMsg.getSOAPPart().getEnvelope().setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns:soap", "http://schemas.xmlsoap.org/soap/envelope/");
        soapMsg.getSOAPPart().getEnvelope().removeAttributeNS("http://schemas.xmlsoap.org/soap/envelope/", "env");
        soapMsg.getSOAPPart().getEnvelope().removeAttribute("xmlns:env");
        soapMsg.getSOAPPart().getEnvelope().setPrefix("soap");
        soapMsg.getSOAPBody().setPrefix("soap");
        soapMsg.getSOAPPart().getEnvelope().getHeader().detachNode();
      }
      catch (SOAPException e)
      {
        e.printStackTrace();
      }
    }
    return true;
  }

Then create a handler.xml file:

<?xml version="1.0" encoding="UTF-8"?>
<handler-chains xmlns="http://java.sun.com/xml/ns/javaee">
  <handler-chain>
    <handler>
      <handler-name>test.MySoapHandler</handler-name>
      <handler-class>test.MySoapHandler</handler-class>
    </handler>
  </handler-chain>
</handler-chains>

And add an annotation to your web service:

@HandlerChain(file = "handler.xml")

于 2012-10-15T01:36:21.800 に答える