Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取soap:使用soap服务时出错_Java_Web Services_Soap_Jax Ws - Fatal编程技术网

Java 获取soap:使用soap服务时出错

Java 获取soap:使用soap服务时出错,java,web-services,soap,jax-ws,Java,Web Services,Soap,Jax Ws,我有一个使用远程soap服务的soap客户端。连接和设置一切正常。当我发送soap请求时,我会收到一条soap错误消息,如下所示: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <soap:Fault> <faultcode>soap:Server</faultcode> <faults

我有一个使用远程soap服务的soap客户端。连接和设置一切正常。当我发送soap请求时,我会收到一条soap错误消息,如下所示:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
 <soap:Body>
  <soap:Fault>
     <faultcode>soap:Server</faultcode>
     <faultstring>Index: 0, Size: 0</faultstring>
  </soap:Fault>
 </soap:Body>
</soap:Envelope>
以下是wsdl的一部分:

<wsdl:definitions xmlns:ns1="http://cxf.apache.org/bindings/xformat" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://request.services.xyz.com/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="requestServiceImplService" targetNamespace="http://request.services.xyz.com/">
 <wsdl:types>
  <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://jaxb.dev.java.net/array" version="1.0">
   <xs:complexType final="#all" name="stringArray">
    <xs:sequence>
      <xs:element maxOccurs="unbounded" minOccurs="0" name="item" nillable="true" type="xs:string"/>
    </xs:sequence>
   </xs:complexType>
  </xs:schema>
  <xs:schema xmlns:tns="http://request.services.xyz.com/" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="unqualified" targetNamespace="http://request.services.xyz.com/" version="1.0">
   <xs:element name="createRequest" type="tns:createRequest"/>
   <xs:element name="createRequestResponse" type="tns:createRequestResponse"/>
   <xs:element name="dataFields" type="tns:dataFields"/>
   <xs:complexType name="createRequest">
    <xs:sequence>
     <xs:element name="hid" type="xs:int"/>
     <xs:element minOccurs="0" name="requestTypeCode" type="xs:string"/>
     <xs:element minOccurs="0" name="createdBy" type="xs:string"/>
     <xs:element minOccurs="0" name="assignedTo" type="xs:string"/>
     <xs:element minOccurs="0" name="createTime" type="xs:dateTime"/>
     <xs:element minOccurs="0" name="data" type="tns:dataFields"/>
     <xs:element minOccurs="0" name="originAppCode" type="xs:string"/>
    </xs:sequence>
   </xs:complexType>
   <xs:complexType name="createRequestResponse">
    <xs:sequence>
     <xs:element minOccurs="0" name="return" type="tns:request"/>
    </xs:sequence>
   </xs:complexType>
   <xs:complexType name="dataFields">
    <xs:sequence>
     <xs:element maxOccurs="unbounded" minOccurs="0" name="dataField" type="tns:dataField"/>
    </xs:sequence>
   </xs:complexType>
   <xs:complexType name="dataField">
    <xs:sequence>
     <xs:element name="name" type="xs:string"/>
     <xs:element name="value" type="xs:anyType"/>
    </xs:sequence>
   </xs:complexType>
  </xs:schema>
 </wsdl:types>
 <wsdl:message name="createRequest">
  <wsdl:part element="tns:createRequest" name="parameters"></wsdl:part>
 </wsdl:message>
 <wsdl:message name="createRequestResponse">
  <wsdl:part element="tns:createRequestResponse" name="parameters"></wsdl:part>
 </wsdl:message>
 <wsdl:operation name="createRequest">
  <wsdl:input message="tns:createRequest" name="createRequest"></wsdl:input>
  <wsdl:output message="tns:createRequestResponse" name="createRequestResponse">    </wsdl:output>
 </wsdl:operation>
<wsdl:binding name="RequestServiceImplServiceSoapBinding" type="tns:IRequestService">
 <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
 <wsdl:operation name="createRequest">
  <soap:operation soapAction="" style="document"/>
   <wsdl:input name="createRequest">
    <soap:body use="literal"/>
   </wsdl:input>
   <wsdl:output name="createRequestResponse">
    <soap:body use="literal"/>
   </wsdl:output>
  </wsdl:operation>
</wsdl:binding>
<wsdl:service name="RequestServiceImplService">
 <wsdl:port binding="tns:RequestServiceImplServiceSoapBinding" name="RequestServiceImplPort">
  <soap:address location="location_where_service_is_being_hosted/cxf/jaxws/RequestService"/>
 </wsdl:port>
</wsdl:service>
</wsdl:definitions>

诸如
索引:0、大小:0等消息通常是由
索引自动边界异常引起的

在你的情况下,这可能意味着:

  • 请求为空
  • 请求的编码错误
  • 安全机制不允许您的请求通过
  • 后端中存在一个
    IndexOutOfBoundsException
下一步:

检查服务器是否接受来自的请求

  • 您可以完全控制请求,因此如果出现问题,可能是后端出错
  • 如果有效,你的客户就有问题了。检查客户端正在发送的请求。完成了吗?它是否包含不可读的字符

结果:使用SoapUI时也会发生此错误

XML/XML模式

XML和XML模式中的一些东西吸引了我的注意

  • 在请求中,仅
    createRequest
    使用名称空间。其他元素没有名称空间,因为它们没有指定名称空间前缀。使用
    将为
    createRequest
    下面的所有元素分配一个默认名称空间
  • (在XML模式中有一个对
    type=“tns:dataFields”
    的引用,尽管只有
    dataField
    。另外
    createRequest
    是小写,而在请求中它是用驼峰大小写的。我认为这两个都不是真正的问题,因为您更改了StackOverflow的名称。)
服务器错误

由于无法发送服务器接受的任何请求(即使使用SoapUI也不行),因此您必须调试服务器

  • 日志中是否有任何错误消息
  • 异常发生在哪里?在
    java.lang.Exception
    上设置一个断点,并缩小范围,直到找到问题

soap:Server是否表示错误来自服务器端。请注意,该服务确实在其后端访问数据库。我在SoapUI上尝试了相同的请求信封,但我得到了相同的错误。我为混淆感到抱歉,这些都是我的错误。我只是编辑了wsdl,所以没有人会感到困惑。我查看了服务器日志。我在那里发现了相同的错误“IndexOutOfBoundException”。谢谢你,我终于找到了问题所在。我在SOAP请求中发送的“requestTypeCode”的值在数据库中不存在,并且由于该类型代码无法映射到数据库表中的任何值中,因此它发送了IndexOutOfBound异常。非常感谢您帮助我调试此问题。您能粘贴您发送的请求吗?我刚刚编辑了问题并将其添加到上面。很抱歉之前没有添加它。@Ashish,您是否也可以检查您在服务器端得到的所有异常。我在这里附加了wsdl的一部分。谢谢你的帮助。
public @XmlElement(name="Request")Request createRequest( @WebParam(name="hid")int hid, @WebParam(name="requestTypeCode")String requestTypeCode, @WebParam(name="createdBy")String createdBy, 
        @WebParam(name="assignedTo")String assignedTo, @WebParam(name="createTime")Date createTime, @WebParam(name="data")DataFields data, @WebParam(name="originAppCode") String originAppCode) throws Exception;
<wsdl:definitions xmlns:ns1="http://cxf.apache.org/bindings/xformat" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://request.services.xyz.com/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="requestServiceImplService" targetNamespace="http://request.services.xyz.com/">
 <wsdl:types>
  <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://jaxb.dev.java.net/array" version="1.0">
   <xs:complexType final="#all" name="stringArray">
    <xs:sequence>
      <xs:element maxOccurs="unbounded" minOccurs="0" name="item" nillable="true" type="xs:string"/>
    </xs:sequence>
   </xs:complexType>
  </xs:schema>
  <xs:schema xmlns:tns="http://request.services.xyz.com/" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="unqualified" targetNamespace="http://request.services.xyz.com/" version="1.0">
   <xs:element name="createRequest" type="tns:createRequest"/>
   <xs:element name="createRequestResponse" type="tns:createRequestResponse"/>
   <xs:element name="dataFields" type="tns:dataFields"/>
   <xs:complexType name="createRequest">
    <xs:sequence>
     <xs:element name="hid" type="xs:int"/>
     <xs:element minOccurs="0" name="requestTypeCode" type="xs:string"/>
     <xs:element minOccurs="0" name="createdBy" type="xs:string"/>
     <xs:element minOccurs="0" name="assignedTo" type="xs:string"/>
     <xs:element minOccurs="0" name="createTime" type="xs:dateTime"/>
     <xs:element minOccurs="0" name="data" type="tns:dataFields"/>
     <xs:element minOccurs="0" name="originAppCode" type="xs:string"/>
    </xs:sequence>
   </xs:complexType>
   <xs:complexType name="createRequestResponse">
    <xs:sequence>
     <xs:element minOccurs="0" name="return" type="tns:request"/>
    </xs:sequence>
   </xs:complexType>
   <xs:complexType name="dataFields">
    <xs:sequence>
     <xs:element maxOccurs="unbounded" minOccurs="0" name="dataField" type="tns:dataField"/>
    </xs:sequence>
   </xs:complexType>
   <xs:complexType name="dataField">
    <xs:sequence>
     <xs:element name="name" type="xs:string"/>
     <xs:element name="value" type="xs:anyType"/>
    </xs:sequence>
   </xs:complexType>
  </xs:schema>
 </wsdl:types>
 <wsdl:message name="createRequest">
  <wsdl:part element="tns:createRequest" name="parameters"></wsdl:part>
 </wsdl:message>
 <wsdl:message name="createRequestResponse">
  <wsdl:part element="tns:createRequestResponse" name="parameters"></wsdl:part>
 </wsdl:message>
 <wsdl:operation name="createRequest">
  <wsdl:input message="tns:createRequest" name="createRequest"></wsdl:input>
  <wsdl:output message="tns:createRequestResponse" name="createRequestResponse">    </wsdl:output>
 </wsdl:operation>
<wsdl:binding name="RequestServiceImplServiceSoapBinding" type="tns:IRequestService">
 <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
 <wsdl:operation name="createRequest">
  <soap:operation soapAction="" style="document"/>
   <wsdl:input name="createRequest">
    <soap:body use="literal"/>
   </wsdl:input>
   <wsdl:output name="createRequestResponse">
    <soap:body use="literal"/>
   </wsdl:output>
  </wsdl:operation>
</wsdl:binding>
<wsdl:service name="RequestServiceImplService">
 <wsdl:port binding="tns:RequestServiceImplServiceSoapBinding" name="RequestServiceImplPort">
  <soap:address location="location_where_service_is_being_hosted/cxf/jaxws/RequestService"/>
 </wsdl:port>
</wsdl:service>
</wsdl:definitions>