4

JAX-RPCスタイルのWebサービスがあり、複合型は次のように定義されています。

<xs:complexType name = "SomeFault">
<xs:sequence>
<xs:element name = "errorMessages" type="some:ErrorMessageWSType" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>

<xs:simpleType name = "ErrorMessageWSType">
<xs:restriction base = "xs:NMTOKEN">
<xs:enumeration value = "INVALID_1"/>
<xs:enumeration value = "INVALID_2"/>
<xs:enumeration value = "INVALID_3"/>
</xs:restriction>
</xs:simpleType>

応答/障害の複合型に単一の配列型フィールドがある場合、サーバー側でマーシャリング例外が発生します。

weblogic.wsee.codec.CodecException:com.bea.xml.XmlExceptionのエンコードに失敗しました:オブジェクト「[Lnamespace.type.ErrorMessageWSType;@693767e9」のマーシャリングで使用するのに適したバインディングタイプを見つけることができませんでした。スキーマタイプの使用:t = SomeFault @ http:// namespace / SOME / v1 java type:namespace.type.ErrorMessageWSType []

SomeFaultを変更すると、複合型に別の要素を追加することでエラーがなくなります。

<xs:complexType name = "SomeFault">
<xs:sequence>
<xs:element name = "errorMessages" type="some:ErrorMessageWSType" maxOccurs="unbounded" />
<xs:element name = "dummyString" type="xsd:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>

wsdlcコード生成中に何か問題が発生していますか、それとも既知の問題ですか?

同様の質問はすでにhttps://forums.oracle.com/forums/thread.jspa?messageID=4462906に投稿されていますが、応答がなければ、ポインタは素晴らしいでしょう。

ありがとう。

4

1 に答える 1

1

これが質問の「なぜ」の部分を解決するかどうかはわかりませんが、次のようにシーケンス部分を書き直してみてください。

<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element name="errorMessages" type="some:ErrorMessageWSType"/>
</xs:sequence>

OTOH、最初のケースではなく、2 番目のケースを機能させるメカニズムは何でしょうか? マーシャラーは、何xsd:stringを意味するかをチェックする前に何を意味するかを理解some:ErrorMessageWSTypeする必要があり、次にリゾルバーまたは何かを起動する必要があるのでしょうか? ErrorMessageWSType この考え方は、私が試みる 2 番目のアプローチにつながります。それは、事前に 宣言することですSomeFault(そして、おそらく別の名前空間で、それが何かを修正するかどうかを確認するだけです)。

私の(疲れた)2セントだけで、これらのアプローチは両方とも、マーシャラーに何らかのバグがあると推測していると思います。なぜなら、サンプルコードの何かがXMLスキーマ定義に従っていないことが実際にはわからないからです。

于 2011-10-24T21:52:41.893 に答える