Unmarshalling SOAP с помощью JAXB оставляет ЛЮБОЙ элемент пустым (null)

#xml #soap #xsd #jaxb

#xml #soap #xsd #jaxb

Вопрос:

Я разархивирую SOAP-сообщение с помощью JAXB, и хотя большая часть сообщения выглядит нормально при разархивировании, один элемент имеет значение null, когда его содержимое должно быть обычным текстом. Если я изменю его содержимое на xml (например <Test> Something </test> , он работает нормально.

Я полагаю, что схема, описывающая эту часть, выглядит следующим образом:

 <xsd:complexType name="NotificationMessageHolderType" >
            <xsd:sequence>
               <xsd:element name="Topic" 
                            type="wsnt:TopicExpressionType" 
                            minOccurs="1" maxOccurs="1" />
               <xsd:element name="ProducerReference" 
                            type="wsa:EndpointReferenceType" 
                            minOccurs="1" maxOccurs="1" />
               <xsd:element name="Message" type="xsd:anyType" 
                            minOccurs="1" maxOccurs="1" />
            </xsd:sequence>
         </xsd:complexType>
  

Проблема связана с ПОСЛЕДНИМ элементом в этой схеме, элементом Message . Его тип «xsd: anyType», разве это не означает, что он может содержать что угодно? Но при отмене сопоставления с помощью JAXB любое неструктурированное содержимое (дословный текст), похоже, опускается.

Кто-нибудь знает, почему и что я мог бы сделать, чтобы исправить ситуацию?

С уважением, Eflite

Ответ №1:

Эта страница (примечание, архивированный элемент wayback machine) — лучшее место для поиска ответа; он предоставляет наглядный пример того, как обращаться к вашему сценарию.

Я цитирую оттуда: «Если вам нужно упорядочить произвольный контент, вам нужно будет создать дерево контента в соответствии с org.w3c.dom. JAXB от Sun в настоящее время использует реализацию из Apache Xerces, то есть класс apache.xerces.internal.dom.ElementNSImpl . «