クライアントから送信する単純な SOAP メッセージを作成しようとしていますが、(一見) エンベロープ内の「soap」名前空間の URI を変更できません。
これは、SOAP ヘッダーがどのように見えるべきかです:
<soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope/" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding/"> ... </soap:Envelope>
だから私は次のコードを持っています:
final SOAPMessage sm = MessageFactory.newInstance().createMessage();
final SOAPPart sp = sm.getSOAPPart();
final SOAPEnvelope se = sp.getEnvelope();
final SOAPHeader sh = se.getHeader();
final SOAPBody sb = se.getBody();
se.removeNamespaceDeclaration(se.getPrefix());
se.addNamespaceDeclaration("soap", "http://www.w3.org/2001/12/soap-envelope");
se.setPrefix("soap");
sb.setPrefix("soap");
sh.setPrefix("soap");
se.setEncodingStyle("http://www.w3.org/2001/12/soap-encoding/");
ただし、送信前にメッセージを印刷すると、封筒は次のようになります。
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding/">
「すべき」セクションと実際の xmlns:soap の URI の違いに注意してください。
呼び出しの最初の引数をaddNamespaceDeclaration
「soap」ではなく「soapy」に変更すると、次のエンベロープが得られます。
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapy="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding/">
addNamespaceDeclaration
呼び出しが のようなものではなく、名前空間が既に存在することを考慮して無視されるという事実と関係があるのではないかと推測していchangeNamespaceDeclaration
ますが、機能するものを見つけることができません(既に試しましたsetAttributeNS
)。
setAttributeNS
編集: URIではなく名前空間を変更しているため、それはばかげていることに気付きました。もう一度編集:検索を続けるsoap:"Namespace"
と、名前が . 説明はありますか?
これは私の最初の投稿なので、既に解決されていることを尋ねている場合はお詫びしますが、検索したところ、見つかったもののほとんどは名前空間の変更に関連しています (SOAP-ENV からのように、これはURI 自体ではなく、soap へのデフォルトの名前空間。前もって感謝します。
-M