0

JABX unmarshaller が xml を非整列化しようとすると、以下のエラーが発生します

スレッド「メイン」での例外 javax.xml.bind.UnmarshalException - リンクされた例外: [org.xml.sax.SAXParseException; 行番号: 1; 列番号: 456; 要素タイプ「customerProductStatus」に関連付けられた属性「xsi:nil」の接頭辞「xsi」はバインドされていません。]

サーバーから返されたxmlを見ると、以下のとおりです。

<customerProductStatus xsi:nil = "true"></customerProductStatus>

どの親タグにも xsi が定義されていません。バインディングを変更せずに schemaLocation を unmarshaller に追加することは可能ですか?

JAXBContext jaxbContext1 = JAXBContext.newInstance(Request.class);
Unmarshaller jaxbUnMarshaller1 = jaxbContext1.createUnmarshaller();
Request request = (Request)jaxbUnMarshaller1.unmarshal(receiveData.getBinaryStream());
4

1 に答える 1

2

これを追加できます:

//Gets schema
SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = schemaFactory.newSchema(xmlSchema);

JAXBContext jaxbContext1= JAXBContext.newInstance(Request.class);
Unmarshaller jaxbUnMarshaller1 = jaxbContext1.createUnmarshaller();

//Sets schema with unmarshaller
jaxbUnMarshaller1 .setSchema(schema);

Request request = (Request)jaxbUnMarshaller1.unmarshal(receiveData.getBinaryStream());

必要なパッケージは次のとおりです。

import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
于 2013-09-01T15:11:28.250 に答える