2

Axis 1.4 1855 を使用してオブジェクトの配列を Java Web サービスに渡すことができません (axis.jar manifest.mf ファイルによると)。IntelliJ IDE を使用して、これを構築し、WSDL を生成し、スタブを生成しています。

数週間前、単純なリクエスト オブジェクト (いくつかの String、int、および double を集約する RequObj) を受け入れ、単純な応答オブジェクト (RespObj、String、int、および double も含む) を返す非常に小さな Web サービスの作成に成功しました。ダブルス)。これはうまくいっています。

しかし、単一の RequObj ではなく RequObj の配列をサービスに渡すように変更しようとすると、エラーが発生します。

AxisFault
 faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
 faultSubcode: 
 faultString: org.xml.sax.SAXException: SimpleDeserializer encountered a child element, which is NOT expected, in something it was trying to deserialize.
 faultActor: 
 faultNode: 
 faultDetail: 
    {http://xml.apache.org/axis/}hostname:JO007BI-BOU7
org.xml.sax.SAXException: SimpleDeserializer encountered a child element, which is NOT expected, in something it was trying to deserialize.
    at org.apache.axis.message.SOAPFaultBuilder.createFault(SOAPFaultBuilder.java:222)

...など

サーバーとの間で送受信するクラスは非常に基本的なものです。RequObj と RespObj の両方を 1 つの String メンバー変数 (m_reqString1 と m_resString1) に減らすと、まったく同じエラーが発生します。サーバーで WSDL を再生成し、クライアントでサーバーの WSDL ファイルから Java スタブ (および明らかに要求と応答のクラス ファイルも) を再生成しました。私は明らかに WSDL の専門家ではありませんが、WSDL には、オブジェクトの配列を渡すための適切なものが含まれているようです。リクエスト オブジェクトとレスポンス オブジェクトに文字列のみが含まれる場合の WSDL も添付しました。

私は本当に立ち往生しており、さまざまなフォーラムでこれを調査することができませんでした. あなたが書いた多くの記事を見てきましたが、この特定の問題に対処しているようには見えません... これを修正できない場合は、独自の Java DOM 関数を呼び出して、要求/応答を XML に変換する必要があります。非標準であることはわかっています…</p>

これらは、リクエストとレスポンスの定義を含むクラスです。添付したファイルでは、これらをさらに単純化して、m_reqString1 と m_resString1 を 1 つだけ含むようにしました。さらに単純なケースでも同じエラーが発生します。

public class RequObj  implements java.io.Serializable {
    public java.lang.String m_reqString1;
    public int m_reqInt1;
    public double m_reqDouble1;
    public java.lang.String m_reqString2;
    public int m_reqInt2;
    public double m_reqDouble2;
    public java.lang.String m_reqString3;
    public int m_reqInt3;
    public double m_reqDouble3;
    ...
}

public class RespObj  implements java.io.Serializable {
    public java.lang.String m_resString1;
    public int m_resInt1;
    public double m_resDouble1;
    public java.lang.String m_resString2;
    public int m_resInt2;
    public double m_resDouble2;
    public java.lang.String m_resString3;
    public int m_resInt3;
    public double m_resDouble3;
    ...
}

ソース ファイル (WSDL、クライアント コード、サービス コード、スタブ コードなど) を含めることができる場合は (そうすると確信しています)、問題を最初に提起したいと思います。誰かがこのレベルの詳細を見たい場合は、質問とともにここに掲載します. どうもありがとう -

4

0 に答える 0