Я пытаюсь добавить некоторую прямую совместимость к Java-приложению, вызывающему Web-сервис на работе, но я сталкиваюсь с некоторыми проблемами с JAX-WS ...
Приложение использует wsdl2java
плагин Mavenсоздать клиент веб-службы CXF из WSDL.Затем он использует этот сгенерированный клиент для связи с веб-службой (через SOAP через JMS).(Возможно, стоит отметить, хотя я не уверен, что атрибут wsdlLocation
<jaxws:client/>
по какой-то причине не заполнен, возможно, потому, что WSDL сам генерируется веб-службой Tibco и поэтому отсутствует некоторыеданные, которые будут использоваться как есть, например, местоположение веб-службы, данные, которые заполняются в элементе <jaxws:client/>
в application-context.xml
...)
, поскольку JAXB довольно слаб с XML (см. На мой предыдущий вопрос ) я решил включить проверку схемы (<jaxws:client><jaxws:properties><entry key="schema-validation-enabled" value="true"/></jaxws:properties></jaxws:client>
), которая работала довольно хорошо, и для улучшения прямой совместимости я использовал атрибут nillable
и элемент <any/>
, например:
<complexType>
<sequence>
<element nillable="true"/>
<element nillable="true">
<complexType>
<sequence>
<element nillable="true" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</complexType>
</element>
<any processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</complexType>
Таким образом, когда веб-служба добавляет элемент в конец типа, приложение должно поместить его в массив «any» и игнорировать его.
Обратите внимание, что элемент <any/>
не упоминает свой атрибут namespace
, который должен по умолчанию ##any
.
Однако, когда я пытаюсь запустить приложение, я получаю следующую ошибку:
Unmarshalling Error: cvc-complex-type.2.4.a : Invalid content was found starting with element 'ns0:SomeNewElement'. One of '{WC[##other:\"http://some/namespace\"]}' is expected.
Так что, несмотря на отсутствие namespace
, JAX-WS использовал namespace="##other"
вместо namespace="##any"
.
я также попробовал другие пространства имен, такие как ##targetNamespace
или ##any
явно, или processContents="skip"
, с точно таким же результатом.
Почему JAX-WS игнорирует <any/>
namespace
, и как я могу использовать элемент <any/>
с его полной мощностью?