0

いくつかのファイル(wsdl、xsd)で構成される簡単なサービスを作成しました。xsdファイルには次の定義があります。

<xs:complexType name="ServerMessage">
    <xs:sequence>
        <xs:element name="type" type="xs:int"/>
        <xs:element name="info" type="xs:string"/>
    </xs:sequence>
</xs:complexType>
<xs:element name="ServerMessage" type="tns:ServerMessage"/>

次に、この要素は次のようにwsdlファイルで参照されます

<wsdl:message name="createItemFault">
    <wsdl:part name="createItemFault" element="tns:ServerMessage"/>
</wsdl:message>

<wsdl:portType name="Service">
    <wsdl:operation name="createItem">
        <wsdl:input message="tns:createItemRequest"/>
        <wsdl:output message="tns:createItemResponse"/>
        <wsdl:fault name="Fault" message="tns:createItemFault"/>
    </wsdl:operation>

そしてついに

<wsdl:binding name="ServiceBinding" type="intf:Service">
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>

    <wsdl:operation name="createItem">
        <soap:operation soapAction="http://test.com/createItem"/>
        <wsdl:input>
            <soap:body use="literal"/>
        </wsdl:input>
        <wsdl:output>
            <soap:body use="literal"/>
        </wsdl:output>
        <wsdl:fault name="Fault">
            <soap:fault name="Fault" use="literal"/>
        </wsdl:fault>
    </wsdl:operation>

WSDL2Javaを起動した後、次のコードを受け取ります

public interface ServerMessage extends org.apache.xmlbeans.XmlObject
{

ServerMessageがこのように定義されるのはなぜですか?Axis1が提供するWSDL2Javaを使用した場合、Javaファイルの最終定義は次のようになりました。

 public class ServerMessage extends org.apache.axis.AxisFault  implements java.io.Serializable

そして、Axis2の生成結果の「アイテム」が大幅に異なると、スローすることさえできなくなります。私は何が間違っているのですか?

4

1 に答える 1

1

そのWSDLから、次のようなCreateItemFault(名前による)を取得する必要があります。wsdl:message

public class CreateItemFault extends java.lang.Exception {
    private org.example.www.service.ServerMessageDocument faultMessage;
    ...
}

それServerMessageDocumentはおそらく次のようになります:

public interface ServerMessageDocument extends org.apache.xmlbeans.XmlObject {
    ...
    org.example.www.service.ServerMessage getServerMessage();

    void setServerMessage(org.example.www.service.ServerMessage serverMessage);

    org.example.www.service.ServerMessage addNewServerMessage();
    ...
}

そして、ここで私たちはあなたに到達しますServerMessage

public interface ServerMessage extends org.apache.xmlbeans.XmlObject {
    ...
}

ただし、メソッドシグネチャはをスローする必要がCreateItemFaultあります。

于 2012-08-23T15:42:51.027 に答える