2013-12-10 3 views
1

У меня есть мыльный клиент, который потребляет отдаленное мыло. Все в порядке с подключением и настройкой. когда я отправить запрос на мыло, я получаю сообщение об ошибке мыльной следующим образом:Получение мыла: Неисправность при использовании мыла

<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> 

Теперь я действительно имеющим трудное время понимания такого сообщения об ошибке. просто для факта, я знаю, что все в порядке с конвертом запроса. Может ли кто-нибудь помочь мне понять эту ошибку.

Вот запрос SOAP Envelope:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Body> 
    <ns2:createRequest xmlns:ns2="http://request.services.xyz.com/"> 
    <hid>1234</hid> 
    <requestTypeCode>APPOINT_REQ</requestTypeCode> 
    <createdBy>testuser</createdBy> 
    <assignedTo>testuser</assignedTo> 
    <data> 
    <dataField> 
    <name>ContentText</name> 
    <value xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string">Test!</value> 
    </dataField> 
    <dataField> 
    <name>Date</name> 
    <value xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:dateTime">2013-12-09T13:28:34.009-05:00</value> 
    </dataField> 
    <dataField> 
    <name>OrderNumber</name> 
    <value xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string">1-123432</value> 
    </dataField> 
    </data> 
    <originAppCode>ABCD</originAppCode> 
</ns2:createRequest> 
</soap:Body> 
</soap:Envelope> 

А вот метод подписи, который я пытаюсь вызвать с запросом SOAP.

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:

<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

Я только что отредактировал этот вопрос и добавил его выше. извините, что не добавлял его раньше. – Ashish

+0

@ Ашиш, не могли бы вы также проверить, какие все исключения вы получаете на своей стороне сервера. –

ответ

2

сообщения как Index: 0, Size: 0 часто вызваны IndexOutOfBoundsException с.

В вас вы так, что может означать:

  • Запрос пуст.
  • Запрос имеет неправильную кодировку.
  • Механизмы безопасности не позволят вашему запросу пройти.
  • В базовом блоке есть IndexOutOfBoundsException.

Следующие шаги:

Проверьте, если ваш сервер принимает запросы от SoapUI.

  • У вас есть полный контроль над запросом, поэтому, если что-то пойдет не так, это, вероятно, ошибка в бэкэнд.
  • Если это работает, в вашем клиенте есть проблема. Проверьте запрос, отправляемый клиентом. Это полно? Он содержит нечитаемые символы?

Результат: Эта ошибка возникает также при использовании SoapUI.

XML/XML Schema

Некоторые вещи в XML и XML-схемы привлекли мое внимание.

  • В запросе только createRequest использует пространство имен. Другие элементы не имеют пространства имен, поскольку они не указывают префикс пространства имен. Использование <createRequest xmlns="http://request.services.xyz.com/"> присваивает пространство имен по умолчанию всем элементам ниже createRequest.
  • (В XML-схеме есть ссылка на type="tns:dataFields", хотя есть только dataField.Также createRequest - это нижний регистр, в то время как в запросе он написан с футляром для верблюда. Я предполагаю, что оба не реальные проблемы, потому что вы изменили имена для StackOverflow.)

Ошибка сервера

Поскольку это не представляется возможным отправить любой запрос, сервер принимает (даже не с SoapUI), вам определенно придется отлаживать сервер.

  • Есть ошибки в журнале?
  • Где происходит Исключение? Установите точку останова на java.lang.Exception и сузите ее до тех пор, пока не найдете проблему.
+0

делает мыло: сервер означает, что ошибка со стороны сервера. только для заметки, служба действительно получает доступ к базе данных на своем сервере. Я попробовал тот же конверт запроса с SoapUI, но я получил ту же ошибку. – Ashish

+0

Прошу прощения за путаницу, это были мои ошибки. Я только что отредактировал wsdl, чтобы никто не запутался. Я просмотрел журналы сервера. Я нашел ту же ошибку там «IndexOutOfBoundException». Спасибо – Ashish

+0

Привет, мне удалось выяснить проблему. значение «requestTypeCode», которое я отправлял в запросе SOAP, не было в базе данных, и поскольку этот тип кода не может быть сопоставлен ни в каких значениях в таблице базы данных, он отправил IndexOutOfBound Exception. Большое спасибо за помощь в отладке проблемы. – Ashish

Смежные вопросы