java - 来自 Java Web 服务的空响应对象

标签 java xml web-services soap soapui

我尝试通过在服务中添加一个 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>

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

问候,

最佳答案

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

结论:

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

关于java - 来自 Java Web 服务的空响应对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12233344/

相关文章:

c# - 更改 XmlElement 名称属性

java - 我们如何在 Eclipse 中用空格替换现有 Java 代码的制表符?

Java:同时子类类及其子类(都超出了我的范围)

python - OpenERP 模块 xml ValidateError

.net - HTTP Web 服务和 HTTP 响应代码

android - 目标主机不能为 null 或在 parameters.scheme=null,host=null 中设置

java - 拦截 JAX-RS 请求 : Register a ContainerRequestFilter with tomcat

java - Java 是否有像 StringBuilder 一样用于连接字符串的 byte[] xxxbuilder 类?

java - 使用循环从 url 加载图像

python - odoo如何通过更新另一个字段的值来更新一个字段的值,两个字段属于不同的类