Soap-envelope-namespace-Präfix in Java-web-service

Ich versuche, ändern Sie den Präfix für die soap-Umschlag in der Antwort des web-service aus
S="http://schemas.xmlsoap.org/soap/envelope/"
zu
soap="http://schemas.xmlsoap.org/soap/envelope/":

also hier ist, wie die Reaktion jetzt aussieht:

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
   <S:Body>
      <n:soaprequestResponse xmlns:n="http://tempuri.org/soaprequest">
         <n:soaprequestResult/>
      </n:soaprequestResponse>
   </S:Body>
</S:Envelope>

und hier ist, wie es Aussehen muss:

<soap:Envelope xmlns:soap:="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <n:soaprequestResponse xmlns:n="http://tempuri.org/soaprequest">
         <n:soaprequestResult/>
      </n:soaprequestResponse>
   </soap:Body>
</soap:Envelope>

Wie kann diese erreicht werden?

EDIT:

Fügte ich hinzu soap handler-Klasse und das problem beginnt, wenn ich versuche, Umschlag:

package org.tempuri.soaprequest;

import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.xml.namespace.QName;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPException;
import javax.xml.ws.handler.MessageContext;
import javax.xml.ws.handler.soap.SOAPHandler;
import javax.xml.ws.handler.soap.SOAPMessageContext;


public class SoapHandler implements SOAPHandler<SOAPMessageContext> {

    @Override
    public Set<QName> getHeaders() {
       //do nothing
       return null;
    }

    @Override
    public boolean handleMessage(SOAPMessageContext context) {
        if ((boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY)) { //Check here that the message being intercepted is an outbound message from your service, otherwise ignore.
            try {
                SOAPEnvelope msg = context.getMessage().getSOAPPart().getEnvelope(); //just trying to get envelope
            } catch (SOAPException ex) {
                ex.printStackTrace();
            }

        return true; //indicates to the context to proceed with (normal)message processing
    }

    @Override
    public boolean handleFault(SOAPMessageContext context) {
          //do nothing
       return true;
    }

    @Override
    public void close(MessageContext context) {
          //do nothing

    }
}

SoapUI wirft:

<S:Fault xmlns:ns4="http://www.w3.org/2003/05/soap-envelope">
    <faultcode>S:Server</faultcode>
        <faultstring>JVMVRFY012 stack shapeinconsistent;class=com/sun/xml/messaging/saaj/soap/SOAPDocumentImpl, method=createDocumentFragment()Lorg/w3c/dom/DocumentFragment;, pc=5
    </faultstring>
</S:Fault>

Tomcat-log hat keine Fehler.

Kommt es nicht ohne benutzerdefinierten soap-handler.

Vielleicht ist der Grund liegt in der Art und Weise, die ich implementiert web-Methode. Es erstellt einen neuen thread mit einem Objekt, dass Prozesse, die Anfrage und liefert dann eine leere Antwort, damit client Freigabe von warten auf Anforderung ist die Verarbeitung über:

@WebResult(name="soaprequestResult", targetNamespace="http://tempuri.org/soaprequest")
public SoaprequestResponse.SoaprequestResult soaprequest(@WebParam(name="streams", targetNamespace="http://tempuri.org/soaprequest") SoaprequestStreams streams) {
    try {
        new Thread(new MyProcess(streams)).start();
        return new SoaprequestResponse().getSoaprequestResult();
    } catch(Exception e) {
        StringWriter sw = new StringWriter();
        PrintWriter pw = new PrintWriter(sw);
        e.printStackTrace(pw);
        String stackTrace = sw.toString();
        return new SoaprequestResponse().getSoaprequestResult();
    }
}

und MyProcess ist Klasse, wo die request-Verarbeitung wirklich ist und vorgegeben.executeUpdate ausgeführt.

  • die :: im soap::Body ist ein Schnittfehler, richtig ?
  • Vielleicht eine dumme Frage, aber warum? Sind beide identisch. Dennoch: stackoverflow.com/questions/12889943/...
  • danke für den link, aber es erklärt sich ändernden Körper-Inhalt-ns-Präfix
InformationsquelleAutor griboedov | 2015-06-03
Schreibe einen Kommentar