2012-08-23 49 views
0

我写了一些由几个文件(wsdl,xsd)组成的简单服务。 在XSD文件我有如下定义:Axis WSDL2Java生成问题

<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如何定义像这样?当我使用的轴1的最终定义的Java文件中提供的WSDL2Java是这样

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

和Axis2产生而造成后“项”是大大不同,它甚至没有抛出。我究竟做错了什么?

回答

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

+0

但是,如果我想要ServerMessage类型是可抛的呢?在非生成代码中使用它作为典型例外 – BSen

+0

取决于您想要使用它。您可以随时更改WSDL中的名称,使您的'wsdl:message'名称为'ServerMessage'(并更改'xsd:type'和'xsd:element'名称以避免命名冲突)。生成的对象将是可抛出的,但不包含您在模式中定义的'type'和'info'属性。这些将出现在表示类型定义的对象中。 – davidfmatheson