web-dev-qa-db-ja.com

NAMESPACE_ERR:名前空間に関して正しくない方法でオブジェクトを作成または変更しようとしました

SOAPレスポンスからSOAPボディを取得しようとしていますが、このエラーが発生しています:

NAMESPACE_ERR: An attempt is made to create or change an object in a way which is incorrect with regard to namespaces.

Document doc = soapResMsg.getSOAPBody().extractContentAsDocument(); -- Exception is thrown here
org.dom4j.io.DOMReader d4Reader = new org.dom4j.io.DOMReader();
org.dom4j.Document d4doc = d4Reader.read(doc);

Saaj1.4の使用

これに対する修正は何でしょうか?

18
Java Guy

私も同じ問題に直面しました。私の場合、サーバー側の問題を修正することはできませんでした。 Xalanをバージョン2.7.0に強制するクライアント側で修正しました。 this を参照してください。

11
jddsantaella

フライングソーサーにも同様の問題がありました。 jddsantaellaのアドバイスに従って、POMの依存関係を調べました。私が使用していたプロジェクトは使用済みのStrutsで、そのカバーの下でStrutsはXalan 2.5.1に依存していました。

Struts依存関係セクションのPOMに以下を追加しました。

<exclusions>
<exclusion>
    <artifactId>xalan</artifactId>
        <groupId>xalan</groupId>
</exclusion>
</exclusions>

Flying Saucerがおやつになりました。

お役に立てれば。

9
theINtoy

私はこの正確な問題を自分で抱えていて、エラーメッセージがいかにあいまいであるため、修正に半日ほど無駄に費やしました。問題はあなたのSOAP=サービス(クライアントの実装ではない)にあります。クライアントに送信するXMLに名前空間の問題があるため、エラーをスローします。

この記事 に従って問題の3つの考えられる理由があります:

  1. 名前空間の接頭辞がnull
  2. 「http://www.w3.org/XML/1998/namespace」の名前空間URIにない「xml」の名前空間接頭辞
  3. 「http://www.w3.org/2000/xmlns/」の名前空間URIにない「xmlns」の名前空間接頭辞

私の場合、問題を引き起こしたのは上記の1位でした。名前空間を使用してXMLを返していませんでした。ルート要素とすべての子ノードに次のように名前空間(「ns」変数)を追加して修正しました。

  Namespace ns = Namespace.getNamespace("tns", "http://mycompany.com/schemas");

  Element result = new Element("ResponseType", ns);
  Document doc = new Document(result);

  result.addContent(new Element("StatusCode", ns).setText(code));
  result.addContent(new Element("Message", ns).setText(message));

人が求めていたように、私のサンプルコードは JDom ではなく、 Dom4j 用であることに注意することが重要です。たまたま使用しているXMLライブラリに適したコードを使用する必要があります。

8
Brent Matzelle

spring-wsを使用して同じ問題が発生しました

別のサードパーティライブラリを追加することで、xalan-2.6.0.jarがwarファイルに追加されました。これは同じNAMESPACE_ERRを引き起こしました

代わりにxalan-2.7.0.jarspringで推奨 として追加して、エラーを解決しました。

8
powerMicha

DocumentBuilderFactory名前空間を認識するようにすることでこれを解決しました:

DocumentBuilderFactory.setNamespaceAware(true)
7
Julius