2016-12-22 2 views
0

Я пытаюсь найти хорошее и наиболее общее решение проблемы с мыльными веб-сервисами. Проблема, которую мне нужно решить, заключается в замене прокси-серверов, которые Apache Axis генерирует, используя данный файл WSDL с прокси-серверами, которые Apache CXF genereta использует команду wsdl2java. Однако, когда я генерировать прокси с CXF и открыли классы в IDE я понял, что у меня есть:Apache CXF parse WSDL Schema xsd: любой тип

@XmlAnyElement(lax = true) 
    protected List<Object> any; 

элемент в качестве поля класса. Это было странно. Я посмотрел на чистый wsdl, и в одном из объектов complextype есть элемент xsd:any. Я долго искал, в чем проблема, и для лучшего решения ее решения. Я нашел this. Похоже, что время выполнения Apache CXF не может определить фактический тип данных элемента. Поэтому мне нужно разобрать его вручную с помощью парсера DOM.

Apache Axis генерирует следующее:

private org.apache.axis.message.MessageElement[] _any; 

Тег:

<any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded" /> 

Мой вопрос: Каков наилучший способ решить эту проблему? Мне действительно нужен парсер DOM? Есть что-то, что я пропустил? Спасибо.

ответ

1

<xsd:any> Используется для обозначения в схеме любого элемента. См. this link

Этот элемент позволяет нам расширить XML-документ с помощью элементов, не указанных в схеме.

Так что отображение CXF верное. Аннотация JAXB @XmlAnyElement(lax = true) означает, что для этого поля, если содержит элемент, аннотированный @XmlRootElement или @XmlElementDecl, тогда экземпляр соответствующего класса будет использоваться для заполнения поля, если не будет установлен элемент в качестве экземпляра org.w3c.dom.Element.

Смотрите пример here

+0

Но что, если я отправить запрос на сервер, и он мне отвечает. Затем мне нужно получить данные, и я звоню. result.getAny(). Это даст мне объект. И затем я хочу вызвать методы для него, но это объект. Axis передает его в MessageElement. И я могу назвать для него конкретные методы. В своей практике я хочу воспроизвести одну из функций этого класса, поэтому мне нужны данные. Я хочу преобразовать элемент в тип документа. –

+0

Согласно документации, вы можете передать объект в 'org.w3c.dom.Element', который позволит вам получить доступ к структуре DOM – pedrofb

+0

Да, я упомянул об этом в своем вопросе. Кажется, у меня нет другого выбора. Спасибо, что ты пытался мне помочь. Я ценю это. –

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