我写了一些由几个文件(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 生成后生成的“项目”大不相同,它甚至不可抛出。我做错了什么?
从那个 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
。