JAX-WS возвращает пустые списки
Вопрос
Я новый в веб-сервисах. Я столкнулся с некоторыми проблемами. На стороне сервера я использую Spring-WS. На стороне клиента я использую JAX-WS. С помощью инструмента WSIMPort я создал классы Java в соответствии с моим WSDL.
Все работает нормально, но по какой-то причине JAX-WS не разбирает массивы и список правильно, все списки пусты
Я абсолютно уверен, что ответ имеет правильную форму, проверил его с помощью SOAPUI, также использую перехватчик регистрации, чтобы войти в систему.
Ниже - фрагменты ответа
Ответ выглядит так
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<firstElementResponse>
<name>hello world text</name>
<name>hello world text</name>
<name>hello world text</name>
</firstElementResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
и фрагменты WSDL
<xs:complexType name="sayHelloResponseType">
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="name" type="xs:string"/>
</xs:sequence>
</xs:complexType>
Чтобы генерировать код клиента, я использую WSIMPORT.
SayHelloResponseType resp = serv.sayHello(r);
List<String> name = resp.getName();
System.out.println(name.size());
Спасибо. Любая помощь будет высоко оценена.
Решение
Кажется, это просто неверный ответ, который не математика WSDL Shema. Ни Spring-WS ни JAX-WS бросает исключение. Это просто разбирает недействительные данные в пустой список без каких-либо домов.
org.springframework.ws.soap.server.endpoint.interceptor.PayloadValidatingInterceptor
спас мой день
вероятно, я должен настроить ведение журнала для JAX-W, чтобы избежать его в следующий раз
Другие советы
Я только что ответил на подобный вопрос в Как я могу обрабатывать Castor Unmarshaling SOAP-сообщений, когда пространство имен определяется внутри тега операции? - Если вы используете SPRILL-WS, вы пишете контракт-первые веб-сервисы, поэтому убедитесь, что вы действительно придерживаетесь этого контракта. Поместите все свои элементы в пространство имен, убедитесь, что ваша XSD-схема ожидает, что элементы будут квалифицированы и объявить NS-URI и NS-префиксы в ваших сопоставлениях касторовых. Это стоит усилия.