2017-12-07 5 views
0

Ich habe eine generierte Klasse von einem SOAP-API.Set Korrekte Header für SOAP-Anfrage

Wenn die Anfrage gesendet, um es in diesem Format sendet:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> 
<SOAP-ENV:Header/> 
<SOAP-ENV:Body> 
<Login> 
<username>Ayo.K</username> 
<password>password</password> 
</Login> 
</SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

Aber was die api erwartet ist:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:adm="http://example.org/test_Service"> 
<soapenv:Header/> 
<soapenv:Body> 
<adm:Login> 
<adm:username>Ayo.K</adm:username> 
<adm:password>password</adm:password> 
</adm:Login> 
</soapenv:Body> 
</soapenv:Envelope> 

Meine Login-Klasse:

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(
     name = "", 
     propOrder = {"username", "password"} 
) 
@XmlRootElement(
     name = "Login", 
) 
public class Login { 
    protected String username; 
    protected String password; 

    public Login() { 
    } 

    public String getUsername() { 
     return this.username; 
    } 

    public void setUsername(String value) { 
     this.username = value; 
    } 

    public String getPassword() { 
     return this.password; 
    } 

    public void setPassword(String value) { 
     this.password = value; 
    } 
} 

Wenn ich hinzufügen namespace = "http://example.org/test_Service" an die @XmlRootElement für die Login Klasse bekomme ich:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> 
<SOAP-ENV:Header/> 
<SOAP-ENV:Body> 
<ns3:Login xmlns:ns3="http://example.org/test_Service"> 
<username>Ayo.K</username> 
<password>password</password> 
</ns3:Login> 
</SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

Wie kann ich den richtigen Namespace im richtigen Format festlegen?

Danke!

Antwort

0

Schließlich fand ich eine Lösung für mein Problem, aber meine Implementierung musste sich ändern.

Zuerst habe ich SOAPPart und SOAPEnvelope verwendet, um meine Anfrage zu erstellen. Ich könnte dann explizit meine Namespace-Deklarationen setzen. Ich folowed die Umsetzung here

Dann meine generierten Klassen

Login Klasse

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(
     name = "", 
     propOrder = {"username", "password"} 
) 
@XmlRootElement(
     name = "Login", 
     namespace = "http://example.org/test_Service" 
) 
public class Login { 
    protected String username; 
    protected String password; 

    public Login() { 
    } 

    public String getUsername() { 
     return this.username; 
    } 

    public void setUsername(String value) { 
     this.username = value; 
    } 

    public String getPassword() { 
     return this.password; 
    } 

    public void setPassword(String value) { 
     this.password = value; 
    } 
} 
ein wenig verändert