ベロシティ テンプレートを使用して SOAP リクエストを作成します。jax-ws フレームワークを使用して Web サービス クライアントを実装します。送信メッセージをインターセプトするために SOAP ハンドラーを配線しました。
本文の内容を計算された新しい本文に置き換えようとしています。
ハンドラーで次のコードを使用します。
public boolean handleMessage(SOAPMessageContext context) {
boolean outbound = (Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
try {
if (outbound) {
SOAPMessage msg = context.getMessage();
SOAPPart sp = msg.getSOAPPart();
SOAPEnvelope env = sp.getEnvelope();
SOAPBody body = env.getBody();
body.normalize();
System.out.println(body.getValue());
NodeList list = body.getElementsByTagName("template");
if(list.getLength() > 0) {
Element template = (Element) list.item(0);
if (template != null) {
String newBody = StringEscapeUtils.unescapeHtml(template.getTextContent());
Document bodyElement = XmlUtils.getDocumentFromText(newBody);
body.removeContents();
body.addDocument(bodyElement);
実行すると、次のエラーが表示されます。
org.w3c.dom.DOMException: NAMESPACE_ERR: 名前空間に関して正しくない方法でオブジェクトを作成または変更しようとしました。
手間をかけずに xml テキストから本文の内容を変更するにはどうすればよいですか?