2012-04-12 18 views
3

私は第三者urlからxmlストリームを解析しようとしています。私のコンソールでは、それはのように見えます。JAXBでXml解析問題

`

<?xml version="1.0" encoding="utf-8"?> 
    <ArrayOfString xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://tempuri.org/"> 
     <string>CMSDocs</string> 
     <string>CRMIncomingDocs</string> 
     <string>CRMOutgoingDocs</string> 
     <string>Customized Reports</string> 
     <string>scripts</string> 
     <string>Site Assets</string> 
     <string>Site Pages</string> 
     <string>Style Library</string> 
    </ArrayOfString> 

`

と私はエラー、次のエラーを取得しています。

Exception in thread "main" javax.xml.bind.UnmarshalException 
- with linked exception: 
[org.xml.sax.SAXParseException: Premature end of file.] 
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.createUnmarshalException(AbstractUnmarshallerImpl.java:315) 
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.createUnmarshalException(UnmarshallerImpl.java:481) 
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:199) 
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:168) 
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:137) 
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:184) 
    at com.cms.webservice.converter.BaseMarshaller.convertToObject(BaseMarshaller.java:41) 
    at com.cms.webservice.converter.BaseMarshaller.main(BaseMarshaller.java:90) 
Caused by: org.xml.sax.SAXParseException: Premature end of file. 
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195) 
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:174) 
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:388) 
    at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1411) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:1058) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648) 
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510) 
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:807) 
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737) 
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107) 
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205) 
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522) 
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:195) 
    ... 5 more 
Java Result: 1 

が、それはXMLで作業しているような

`

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<ArrayOfString> 
    <string>Kshitij-1</string> 
    <string>Kshitij-2</string> 
    <string>Kshitij-3</string> 
    <string>Kshitij-4</string> 
    <string>Kshitij-5</string> 
</ArrayOfString> 

`

おかげ

+0

何スキーマ(Javaクラスや、など)については、パッケージ情報

@XmlSchema( namespace = "http://tempuri.org/", elementFormDefault = XmlNsForm.QUALIFIED) package example; import javax.xml.bind.annotation.XmlNsForm; import javax.xml.bind.annotation.XmlSchema; 

あなたがにそれを解析しようとしています。 .. –

+0

これはJavaクラス@XmlRootElement(na私= "がArrayOfString") @XmlAccessorType(XmlAccessType.FIELD) パブリッククラスがArrayOfString { @XmlElement(名前= "文字列") ArrayListの STRINGLIST =新しいArrayListを(); public ArrayList getStringList(){ return stringList; }公共ボイドsetStringList(ArrayListの STRINGLIST){ this.stringList = STRINGLIST。 } } – KSHiTiJ

+0

これらの2つのXMLは、最初のxmlns名前空間のために完全に異なります。どちらが正しいですか? – davidfrancis

答えて

3

あなたは、名前空間の資格を指定する@XmlSchemaアノテーションを使用することができます。パッケージの注釈は、package-infoという特別なクラスに置かれます。このクラスは、ドメインクラスと同じパッケージに存在する必要があります。以下は、あなたのユースケースに適した例です。

詳細情報

+1

それはうまくいきますが、理由を説明する価値はあると思います。 (ソースからの)最初のドキュメントは、ドキュメントを修飾するスキーマの名前空間を扱います(@davidfrancisと同様に)、名前空間を持たない最後のドキュメントとは異なります。 JAXBはスキーマの名前空間に敏感なので、クラスはドキュメントと「互換性のある構造」を持つことができますが、JAXBは適切な注釈を使用して目的の名前空間に適切に関連付けます。要するに、JAXBのフラストレーションフリーを使用するには、xmlスキーマの名前空間を理解することが不可欠です。 –