0
これは私の初めてのSOAPリクエストとXMLの一般的な作業です。私は、SOAP要素にいくつかの名前空間を表示することはできません。私はこれを必要とする:複数の名前空間を持つJava SOAPElement
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/SoapEnvelope.xsd"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<cuns:HeaderInfo xmlns:cuns="http://website.com/cuns">
<cuns:Field1>123456</cuns:Field1>
<cuns:Field2>987654321</cuns:Field2>
</cuns:HeaderInfo>
</soap:Header>
<soap:Body>
<n1:BodyField1
xsi:schemaLocation="http://website.xsi/location"
xmlns:cuns="http://website.com/cuns"
xmlns:n1="http://website.com/n1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Transaction>
...
</Transaction>
しかし、私の出力は私のxmlnsが欠落していた。この得られます。そこにいるにもかかわらず、XSI XSIを:schemaLocationのをBodyField1に。
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/SoapEnvelope.xsd"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<cuns:HeaderInfo xmlns:cuns="http://website.com/cuns">
<cuns:Field1>123456</cuns:Field1>
<cuns:Field2>987654321</cuns:Field2>
</cuns:HeaderInfo>
</soap:Header>
<soap:Body>
<n1:BodyField1
xmlns:cuns="http://website.com/cuns"
xmlns:n1="http://website.com/n1"
xsi:schemaLocation="http://website.xsi/location">
<Transaction>
...
</Transaction>
のxmlns:XSI減速がエンベロープとcunsのため正常に動作し、n1はBodyField1の下に表示されます。私のコードは明示的にxmlns:xsiを宣言し、次にxsi:schemaを宣言します。なぜ2つの他の名前空間とスキーマは表示されるのだろうが、xsi名前空間は表示されません。私は名前空間の異なる順序を試しましたが、それは重要ではないようです。 BodyField1のコードは次のとおりです。
public static void makeTransaction(Vector<Transaction> transactions, SOAPMessage message){
DOMSource source = null;
Element superRoot = null;
SOAPBodyElement bodyRoot = null;
SOAPEnvelope envelope = null;
SOAPBody body = null;
try {
//Make the document
envelope = message.getSOAPPart().getEnvelope();
body = envelope.getBody();
Name n1 = envelope.createName("BodyField1", "n1",
"http://website.com/n1");
bodyRoot = body.addBodyElement(n1);
bodyRoot.addNamespaceDeclaration("xsi", "http://www.w3.org/2001/XMLSchema-instance");
bodyRoot.setAttributeNS("http://www.w3.org/2001/XMLSchema-instance", "xsi:schemaLocation",
"http://schemas.xmlsoap.org/soap/envelope/SoapEnvelope.xsd");
bodyRoot.addNamespaceDeclaration("cuns", "http://website.com/cuns");
} catch (SOAPException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}