次のように、ジェネリックメソッドをjax-wsに配置したかどうかを知りたいです。
public List<MyCustomClass> getSomething()
jax-wsはこれをサポートしていますか?クライアント側では、メソッドの戻り値はどのようになりますか?
クライアント側で List を取得します (または、WS コンシューマが別の言語で記述されている場合は MyCustomClass オブジェクトの配列)。それは問題になりません。常にインターフェイスにプログラムすることを忘れないでください。
Java で WS を作成する練習がまだあまりないようですので、いくつかアドバイスをします。
循環参照を含む 2 つ以上のオブジェクトを送信しないでください。循環参照の問題が発生します。これは、JAX-WS ツールが要求に対して延々と続く XML 応答を作成するためです。発見するのは非常に難しいかもしれません。ケースを見てみましょう:
public class ClassA {
ClassB instanceOfB;
//getters and setters...
}
public class ClassB {
ClassA instanceOfA;
//getters and setters...
}
public class MyJAXWS {
@WebMethod
public ClassA getClassA() {
ClassA classA = new ClassA();
ClassB classB = new ClassB();
classB.setInstanceOfA(classA);
classA.setInstanceOfB(classB);
return classA; //boom! circular reference problems!
}
}
特定の Java ライブラリ クラスではなく、常に戻りクラスにインターフェイスが必要です。つまり、クラスには, List
(コンテナーの場合) が必要です。これは、このインターフェイスが実装クラスよりも高いレベルにあり、Java 以外のクライアントが Web サービス メソッドを使用しようとすると問題が発生する可能性があるためです。Set
Map
public class ClassC {
List<ClassA> lstClassA; //good!
ArrayList<ClassB> alstClassB; //not very flexible with other languages =\
}
Web サービスを通過するクラスは、サービスまたはビジネス ロジック層のクラスではなく、POJO (Plain Old Java Objects) である必要があります。なんで?クライアントとの通信時に属性値のみがマーシャリング/アンマーシャリングされるため、Web サービスのコントラクトにメソッド コードは表示されません。
public class ClassD {
private int intValue;
//naive business logic method
//won't be generated in the WSDL for the clients/consumers of the Web Services
public void printIntValue() {
//pretty simple implementation
System.out.println(this.intValue);
}
}
私は、Java を使用した最後の SOA プロジェクトで、これら 3 つの問題に直面しました。他の人がこの回答を強化するか、リンク付きの情報を提供してくれることを願っています。
はい、問題ありませんが、配列の使用をお勧めします。ルイージが言ったように、あなたはList<MyCustomClass>
. さらに追加するには、ここでJAX-WS でサポートされているタイプの完全なリストを見つけることができます