クライアントから送信する単純なSOAPメッセージを作成しようとしていますが、封筒の「soap」名前空間のURIを変更できません。Java SoapMessageを使用してエンベロープ内の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/">
"should-be"セクションのxmlns:soapのURIの違いに注目してくださいと実際の。
私が代わりに「石鹸」の「石鹸」へaddNamespaceDeclaration
コールの最初の引数を変更した場合、これは私が手に、次の封筒です:
<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/">
私はそれはとは何かを持っていることが推測しています実際にはchangeNamespaceDeclaration
のようなものではなくaddNamespaceDeclaration
であり、名前空間がすでに存在していると考えられても無視されますが、何かを見つけることができません(私は既にsetAttributeNS
を試しています)。
EDIT:setAttributeNS
がURIではなく名前空間を変更しているので、愚かなことに気付きました。 もう一度編集してください:私はちょっと混乱しています。検索を続けると、名前がsoap:"Namespace"
になってしまうので、その意味で私は名前空間を変更したいのですが...名前空間が "石鹸"部分だと思った。任意の明確化?
これは私の最初の投稿ですので、私はすでに解決されていることを尋ねていますが謝りますが、私は検索しましたが、私が見つけたものの大部分はSOAP-ENVこれはURI自体ではなく、デフォルトの名前空間であり、soapになります)。前もって感謝します。
-M
感謝を:あなたのコードから行を変更し、すべての名前空間を削除してみて、あなたが本当に使用すべきことであるが、その接頭辞を指定する必要がある場合には
に最初の行を変更し、このコードが動作しているようですしかし、私はあなたの投稿の約5分前にそれを試してみたところ、デフォルトの名前空間が "SOAP-ENV"( "soap"に変更)から "env"に変更されたことがわかりました: ' \t ... env:Envelo pe> ' 私が最初に投稿したものと一致するように封筒が本当に必要です - それ以外の提案はありますか? MessageFactoryでサポートされているプロトコルの両方が正しくないと思われるので、メッセージを構築する必要があるかもしれません。 –
MandM
接頭辞(例: 'env'または' soap')は意味上の意味を持ちません。名前空間(http:// www.w3.org/2003/05/soap-envelope'など)。 – erikxiv
よく知っておきたいと思いますが、私が通信しているデバイスでは、これらのフィールドが要求の中でそのようになっている必要があります(私は思っています)。 – MandM