1

Web サービスの記述に関しては、Java と NetBeans に問題があるようです。私は数日間検索しましたが、運が悪く、私と同じ問題を抱えている人からの返信がありませんでした。

複合型 (LoginReply) を返す Web サービスを作成しましたが、その複合型には別の複合型 (AppInfo) の配列が含まれています。

ただし、これから WSDL を生成すると、XSD の複合型定義が空白になり、情報を手動で追加すると、データが Web サービスに正常に渡された場合でも、Web サービスは null を返します。

<xs:complexType name="appInfo">
<xs:sequence/>
</xs:complexType>

LoginReply: http://pastebin.com/Umx6ayvi AppInfo: http://pastebin.com/566WnZ4H

誰かが私が間違っていることを指摘できる場合、またはこれが NetBeans のバグである場合、私は Java を初めて使用するので、単に何かを理解していないことを除外することはできませんが、引っ張るつもりです。私の髪はここにあります。

編集:

NetBeans 経由で tomcat にデプロイすると、次のエラーが発生することに気付きました:

WARNING: duplicate class definition bug occured? Please report this :    uk/co/example/ComplexTypes/LoginReply$JaxbAccessorM_getApplications_setApplications_[Luk_co_example_ComplexTypes_AppInfo;

java.lang.ClassFormatError: Illegal class name "uk/co/example/ComplexTypes/LoginReply$JaxbAccessorM_getApplications_setApplications_[Luk_co_example_ComplexTypes_AppInfo;" in class file uk/co/example/ComplexTypes/LoginReply$JaxbAccessorM_getApplications_setApplications_[Luk_co_example_ComplexTypes_AppInfo;

co_uk_example の前のランダムな L に注目してください。私の調査によると、これは修正が必要な古いバグであり、この問題は 1 年以上報告されていないため、どこに行けばよいかわかりません。

別の編集:

appInfo のリストを取得してクライアントに返すだけの新しい Web メソッドをサービスに追加しました。これは、AppInfo 内でのシーケンスの生成を拒否する NetBeans と同じように失敗します。クラスを宣言するために何かが欠けていると確信していますが、何も欠けていないことを確認するために何度もチェックしました。

4

3 に答える 3

1

この問題は、非常に単純な間違いに帰着しました。AppInfo クラスは、非標準のゲッターとセッターを使用していました。

public void SetAppID(int AppID)
{
    this.AppID = AppID;
}

これは正しくありません (セットの大文字に注意してください)。次のようにする必要があります。

public void setAppID(int AppID)
{
    this.AppID = AppID;
}

大文字の使用は JavaBeans の標準ではないため、JAX-WS はこのクラスの WSDL を生成する方法を知りませんでした。質問に答えてくれた次のリンクからあまりにもシャムに感謝します

JAX-WS Web サービスでカスタム複合型を返す方法は?

于 2012-10-18T13:51:45.483 に答える
1

警告はあなたに良いヒントを与えます:「警告:クラス定義の重複バグが発生しました」

  • ws 実装クラスは、AppInfo を直接使用する LoginReply クラスを直接使用します (+ ws 実装でこのクラスも直接使用している可能性があります) => jaxb がそれを見つけます
  • @XMLSeeAlso(...) は jaxb に参照クラスを「リンク」するよう指示します

=> 同じクラスの 2 つの定義 (jaxb がこのケースをより適切に処理できないのが設計によるものなのか、バグによるものなのかは不明)

これを修正するには、LoginReply クラスから @XmlSeeAlso を削除するだけで問題ありません。

于 2012-10-17T16:32:35.590 に答える
-1

httpプロトコルでネット(プログラムされたポートタイプ)を介して「複雑なタイプ」を送信できるとは思いませんが、配列は区切り文字列セットに暗黙的に変換される場合があります。データ転送についてはドキュメントを確認してください。

于 2012-10-16T10:10:52.543 に答える