0

トップダウン (wsdl が最初) の ws を jboss4 から jboss7 に移動しており、CXF でいくつかの問題が発生しています。私は、standalone\data\wsdl\x.ear\x.war\x.wsdl にある大きな wsdl ファイルが、提供された xsd セットから生成されていないことに気付きました。クラスから生成されているようです。たとえば、JBoss4 からの定義は (難読化) 読み取ります

<element name="x">
<complexType>
<sequence>
<element minOccurs="0" name="x" type="x"/>
<choice>
<element name="x" type="x"/>
<element name="x" type="x"/>
<element name="x" type="x"/>
<element name="x" type="x"/>
<element name="x" type="x"/>
</choice>
</sequence>
</complexType>
</element>

CXF によって生成されたものは、すべての coice 要素が minoccurs = 0 に置き換えられており、実際の使用には完全に無効です。

<xs:element name="x">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="x" type="xs:string"/>
<xs:element minOccurs="0" name="x" type="ns1:x"/>
<xs:element minOccurs="0" name="x" type="ns1:x"/>
<xs:element minOccurs="0" name="x" type="ns1:x"/>
<xs:element minOccurs="0" name="x" type="ns1:x"/>
<xs:element minOccurs="0" name="x" type="ns1:x"/>
</xs:sequence>
</xs:complexType>
</xs:element>

これは、wsconsume が Java クラスを構築し、cxf で解析できるほど十分に注釈を付けているためですが、complexTypes の最初の意図を実際に提示するには十分ではないためです。 CXFにwsdlを生成させずに、あなたの選択は?これを実現するために Spring を使用するつもりはありません。

4

1 に答える 1

0

そのため、@webservice アノテーションで wsdlLocation を設定すると、ここで説明するエラーが発生します

http://mail-archives.apache.org/mod_mbox/cxf-users/200806.mbox/%3C1932ACF3-DCD2-4073-83DD-981FC0F68F53@apache.org%3E

読んだ後はずっと簡単になりました

そこの指示には2つのオプションがリストされています:

1) FooDocumentImpl クラスの @WebService アノテーションを更新して、wsdl の値と一致する serviceName/portName 属性を設定します。

2) config の要素を更新して、サービス名とポート名の qname を追加します。

1 つ目は、Spring を使用していない場合です。そのため、明示的に @WebService アノテーションを次の場所に持ってきた後です。

@WebService(endpointInterface = "main.package.InterfaceWS", serviceName = "InterfaceWSService", name = "InterfaceWS", targetNamespace = "http://Interface.namespace.main", wsdlLocation = "WEB-INF/wsdl/InterfaceWS.wsdl" ,portName="InterfaceWSPort")

InterfaceWS.wsdl のサービスの説明と一致するようにします。

<service name="InterfaceWSService">
                    <port binding="tns:InterfaceWSSOAPBinding" name="InterfaceWSPort">
                              <soap:address location="http://localhost:8080/publishedLocationOfInterface />
                    </port>
</service>

それは魅力のように働いた

于 2013-03-11T21:31:04.890 に答える