2016-07-22 11 views
1

長年に渡ってXMLスキーマを扱っていないので、XMLスパイで生成されたスキーマでXMLを手動でアンマーシャリングする際に問題が発生しています。JAXBの非整列スキーマの問題: 'org.xml.sax.SAXParseException cvc-elt.1'

私の人生のために、他のさまざまなgoogle'd質問/同様のilkの反応にもかかわらず、私はそれを解決できません!

ここではXML(大幅にだけ問題を強調するために減少)です:

<myelement xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="./myxsd.xsd"> 
</myelement> 

はここmyxsd.xsdスキーマ(大幅にだけ問題を強調するために減少した)です:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://myhost.com/Elements" xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" targetNamespace="http://myhost.com/Elements" elementFormDefault="qualified" attributeFormDefault="unqualified" vc:minVersion="1.1"> 
    <xs:element name="myelement"/> 
</xs:schema> 

がここにコードがあります:

String xml = ""; //input the XML from above. 
JAXBContext context = 
    JAXBContext.newInstance(MyElement.class); 

Unmarshaller unmarshaller = context.createUnmarshaller(); 

document = (MyElement) unmarshaller.unmarshal(new StringReader(xml)); 

と要素POJO:

で結果の
@XmlRootElement(name = "myelement", namespace = "http://myhost.com/Elements") 
@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "myelementType", namespace = "http://myhost.com/Elements") 
public class MyElement { 
} 

javax.xml.bind.UnmarshalException - with linked exception:[org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 110; cvc-elt.1: Cannot find the declaration of element ‘myelement’.] 
+0

XMLは実際のコードに含まれていますか?ファイルをunmarhsal()に送るだけの理由はありませんか? – milez

+0

これは単なるコード例ですが、XMLは渡されても同じエラーが発生します。でもありがとう。 – deanpullen

答えて

0

スペースが存在「私の要素」であると思われます。 myxsd.xsdファイルを確認してください

+0

ありがとうございますが、そこにスペースがないようですか? – deanpullen

+0

次に、メッセージ「要素」の宣言が見つかりません。スペースがあるように見えるので奇妙です。多分サックスが失敗した場所でのデバッグは助けになるかもしれません –

+0

ああ、謝罪します。私はあなたがエラーの意味を理解していなかった - これは私だけコピーして、匿名などのクラスを作るためのエラーを編集して貼り付け、スペースはそこにすべきではなく、私はエラーを更新しました。ありがとう! – deanpullen

0
public static MyElement unmarshal(String str) throws JAXBException { 
JAXBContext jaxbContext = JAXBContext.newInstance(MyElement.class); 
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); 

JAXBElement<MyElement> root = jaxbUnmarshaller.unmarshal(new StreamSource(new StringReader(str))), MyElement.class); 
MyElement el = root.getValue(); 

return el; 
} 

多分上記のようなものです。