Я сгенерировал классы с помощью xjc, и я пытаюсь обработать следующий XML-документ. Я получаю сообщение об ошибке:JAXB minOccurs и UnmarshalException
javax.xml.bind.UnmarshalException: Unexpected end of element {http://schemas.xmlsoap.org/soap/envelope/}:Body
Я считаю, это потому, что XML не содержит элемент Fault (при добавлении в элемент неисправности, это делает процесс без ошибок Ответ будет либо содержать RETRIEVAL_ID. или Ошибка, но никогда и то и другое. Я думал, что minOccurs = 0 в схеме исправит это, но не пойдет (по крайней мере, как я это сделал). Возможно ли использовать JAXB для этой ситуации, то есть когда либо из этих элементов могут существовать, но никогда оба одновременно?
XML Ответ на вопрос:
<?xml version = '1.0' encoding = 'UTF-8'?>
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema">
<env:Header>
<bmw:rule xmlns:bmw="http://adr.com/bmw">
<bmw:customer>44</bmw:customer>
<bmw:schemaName>ABC</bmw:schemaName>
<bmw:schemaVersion>1.0</bmw:schemaVersion>
</bmw:rule>
</env:Header>
<env:Body>
<bmw:RETRIEVAL_ID xmlns:bmw="http://adr.com/bbs">15086</bmw:RETRIEVAL_ID>
</env:Body>
</env:Envelope>
Схема:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://schemas.xmlsoap.org/soap/envelope/" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:bmw="http://adr.com/bmw">
<xs:import namespace="http://adr.com/bmw" schemaLocation="bmw.xsd"/>
<xs:element name="Envelope">
<xs:complexType>
<xs:sequence>
<xs:element ref="env:Header"/>
<xs:element ref="env:Body"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Header">
<xs:complexType>
<xs:sequence>
<xs:element ref="bmw:rule"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Body">
<xs:complexType>
<xs:sequence>
<xs:element ref="bmw:RETRIEVAL_ID" minOccurs="0"/>
<xs:element ref="env:Fault" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Fault">
<xs:complexType>
<xs:sequence>
<xs:element ref="bmw:fault"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Это сработало, спасибо SOOOO много !!!!!!!!! – bmw0128
Мне любопытно, я изучаю xml, xsd, jaxb и т. Д., Как вы узнали этот ответ, как бы я узнал этот ответ без этого форума? – bmw0128
@ bmw0128 - когда я учился, это была комбинация сотрудников, просто пыталась разобраться, документация Oracle (тогда Sun), Googling для учебных пособий и просто пыталась до тех пор, пока они не работали. – justkt