0

我尝试通过在服务中添加一个 main 方法将 Web 服务作为 java 应用程序运行,我得到了所有模型值的完美填充。Oracle 10g DB 有一些 DAO 操作,在我的类路径中有 classes12.jar。

然后我创建了一个 wsdl 并在 SOAP UI 中对其进行了测试。在那里我可以看到该服务正在返回一个空对象作为响应。

wsdl 是使用 Apache AXIS v1.4 创建的。

这意味着生成的 wsdl 不正确,因为当我将其作为 java 客户端应用程序运行时,我的所有代码都运行良好。

附加信息:

当 Web 服务中存在的方法的返回类型为整数时,则在使用 SOAP UI 调用 Web 服务时会正确返回该值。但是当我尝试返回模型时,会返回一个空响应对象。

WSDL:

<!--WSDL created by Apache Axis version: 1.4
 Built on Apr 22, 2006 (06:55:48 PDT)-->
 <wsdl:types>
  <schema elementFormDefault="qualified" targetNamespace="http://service.com"   xmlns="http://www.w3.org/2001/XMLSchema">
  <import namespace="http://model.com"/>
  <element name="getAge">
   <complexType/>
  </element>
  <element name="getAgeResponse">
   <complexType>
    <sequence>
     <element name="getAgeReturn" type="xsd:int"/>
    </sequence>
   </complexType>
  </element>
  <element name="fetchEmployeeDetails">
   <complexType>
    <sequence>
     <element name="empId" type="xsd:int"/>
    </sequence>
   </complexType>
  </element>
  <element name="fetchEmployeeDetailsResponse">
   <complexType>
    <sequence>
     <element name="fetchEmployeeDetailsReturn" type="tns1:EmployeeDetails"/>
    </sequence>
   </complexType>
  </element>
 </schema>
 <schema elementFormDefault="qualified" targetNamespace="http://model.com"    xmlns="http://www.w3.org/2001/XMLSchema">
  <complexType name="EmployeeDetails">
   <sequence>
    <element name="age" type="xsd:int"/>
    <element name="deptId" type="xsd:int"/>
    <element name="empId" type="xsd:int"/>
    <element name="empName" nillable="true" type="xsd:string"/>
    <element name="sex" nillable="true" type="xsd:string"/>
   </sequence>
  </complexType>
 </schema>
</wsdl:types>

  <wsdl:message name="fetchEmployeeDetailsResponse">

  <wsdl:part element="impl:fetchEmployeeDetailsResponse" name="parameters">

  </wsdl:part>

  </wsdl:message>

  <wsdl:message name="getAgeRequest">

     <wsdl:part element="impl:getAge" name="parameters">

     </wsdl:part>

  </wsdl:message>

  <wsdl:message name="getAgeResponse">

     <wsdl:part element="impl:getAgeResponse" name="parameters">

     </wsdl:part>

  </wsdl:message>

  <wsdl:message name="fetchEmployeeDetailsRequest">

     <wsdl:part element="impl:fetchEmployeeDetails" name="parameters">

     </wsdl:part>

  </wsdl:message>

  <wsdl:portType name="WebService1">

     <wsdl:operation name="getAge">

        <wsdl:input message="impl:getAgeRequest" name="getAgeRequest">

      </wsdl:input>

        <wsdl:output message="impl:getAgeResponse" name="getAgeResponse">

      </wsdl:output>

     </wsdl:operation>

     <wsdl:operation name="fetchEmployeeDetails">

        <wsdl:input message="impl:fetchEmployeeDetailsRequest" name="fetchEmployeeDetailsRequest">

      </wsdl:input>

        <wsdl:output message="impl:fetchEmployeeDetailsResponse" name="fetchEmployeeDetailsResponse">

      </wsdl:output>

     </wsdl:operation>

  </wsdl:portType>

  <wsdl:binding name="WebService1SoapBinding" type="impl:WebService1">

     <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>

     <wsdl:operation name="getAge">

        <wsdlsoap:operation soapAction=""/>

        <wsdl:input name="getAgeRequest">

           <wsdlsoap:body use="literal"/>

        </wsdl:input>

        <wsdl:output name="getAgeResponse">

           <wsdlsoap:body use="literal"/>

        </wsdl:output>

     </wsdl:operation>

     <wsdl:operation name="fetchEmployeeDetails">

        <wsdlsoap:operation soapAction=""/>

        <wsdl:input name="fetchEmployeeDetailsRequest">

           <wsdlsoap:body use="literal"/>

        </wsdl:input>

        <wsdl:output name="fetchEmployeeDetailsResponse">

           <wsdlsoap:body use="literal"/>

        </wsdl:output>

     </wsdl:operation>

  </wsdl:binding>

  <wsdl:service name="WebService1Service">

     <wsdl:port binding="impl:WebService1SoapBinding" name="WebService1">

        <wsdlsoap:address location="http://localhost:8045/WebService1/services/WebService1"/>

     </wsdl:port>

  </wsdl:service>

请帮我解决这个问题。如果需要一些额外的信息,请询问。

问候,

4

1 回答 1

1

错误是使用 main 方法进行单元测试并将其作为 java 应用程序从 main 方法运行。该问题与 classes12.jar 放置有关。对于 Web 应用程序,jar 应该放在 lib 文件夹旁边。但对于 Java 客户端应用程序来说就不一样了。因此,当我尝试使用 SOAP UI 运行连接对象时,它没有被正确检索。

结论:

切勿通过在服务类中添加 main 方法并将其作为 Java 客户端应用程序运行来测试 Web 服务,这可能会导致您出现类似这样的不必要的问题。

于 2012-09-16T11:57:53.987 回答