0

古い機器をテストするには、(開発しなかった)古いソフトウェアを入手する必要がありました。機器は、Webサービスによってサーバーと「通信」します。これらのWebサービスはaxisによって自動生成されます(Axisはクラスを取得し、そのメソッドからWebサービスを作成します)。

問題は次のとおりです。機器は次のようなxmlを読み取るように開発されました。

<ns:getReferenceCurveResponse xmlns:ns="http://services.teste.org" xmlns:ax22="http://data.teste.org/xsd" xmlns:ax23="http://util.java/xsd">  
<ns:return type="org.teste.ReferenceCurve">  
<ax21:createdOn>2012-08-16 17:00:59.0</ax21:createdOn>  
<ax21:endPoint>9.2</ax21:endPoint>  
<ax21:fiberId>21</ax21:fiberId>  
<ax21:id>42</ax21:id>  

そして今、Webサービスは次のようになっています。

<ns:getReferenceCurveResponse xmlns:ns="http://services.teste.org" xmlns:ax22="http://data.teste.org/xsd" xmlns:ax23="http://util.java/xsd">  
<ns:return type="org.teste.ReferenceCurve">  
<ax22:createdOn>2012-08-16 17:00:59.0</ax22:createdOn>  
<ax22:endPoint>9.2</ax22:endPoint>  
<ax22:fiberId>21</ax22:fiberId>  
<ax22:id>42</ax22:id>  

お気づきのとおり、名前空間のプレフィックスがax21からax22に変更されました。これは、機器がプレフィックスax21にコーディングされているため、エラーが発生しています。

私は解決策を探しましたが、見つかりませんでした。サーバー側を再コンパイルしましたが、これも成功しませんでした。Axis2によって自動生成されるため、この名前空間プレフィックスを変更する場所が見つかりませんでした

4

2 に答える 2

1

ええと、それは1日長引いているので、突堤はここのタグの1つなので、突堤でこれを処理するために絶対に間違った方法で投げます

サーブレットフィルタを使用し、その場で応答を微調整して、名前空間の問題を修正することもできますが、それは悪い悪い悪いです:)

幸運を!

于 2012-08-18T13:21:29.500 に答える
0

これを修正するものが見つかりませんでした。

これはローカルでテストするためのものであり(サーバー側はクライアント側で稼働しています)、この変更はサーバー側にのみ影響するため、名前空間プレフィックス「ax22」を「ns」に変更することができました。

これを行うには、次のタグをservices.xmlに追加します。

<schema schemaNamespace="http://your.package.inverted/xsd"/>

たとえば、com.google.somethingパッケージがある場合は、次のようになります。

<schema schemaNamespace="http://something.google.com/xsd"/>
于 2012-08-20T12:50:18.490 に答える