JAXB - Exception bei Unmarshall

y0dA

Erfahrenes Mitglied
Hi!
Also ich habe hier ein xsd, aus welchem ich Java Klassen generieren habe lassen (Eclipse Plugin), nun möchte ich mit Hilfe von JAXB gerne ein XML File einlesen und auf diese generierten Java Klassen abbilden.

Nur bekomme ich folgende Exception (es werden auch Inhalte des XML Files in der Exception ausgegeben, jene habe ich nicht kopiert, da alles dann sehr lange und unleserlich wäre):
Code:
javax.xml.bind.UnmarshalException
 - with linked exception:
[java.net.MalformedURLException: no protocol: <?xml version="1.0" encoding="UTF-8" standalone="no"?><LogistikML xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
...
		at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:197)
	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 at.pcd.wam.gegenstandsbereich.tmcWeb.domain.model.PlanningModel.main(PlanningModel.java:172)
Caused by: java.net.MalformedURLException: no protocol: <?xml version="1.0" encoding="UTF-8" standalone="no
	at java.net.URL.<init>(URL.java:567)
	at java.net.URL.<init>(URL.java:464)
	at java.net.URL.<init>(URL.java:413)
	at org.apache.xerces.impl.XMLEntityManager.setupCurrentEntity(Unknown Source)
	at org.apache.xerces.impl.XMLVersionDetector.determineDocVersion(Unknown Source)
	at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
	at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
	at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
	at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
	at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:195)
	... 3 more

Hier der Code dazu:
Code:
	public static void main(String[] args) {
		try {
			String fPath = "C:\\work\\workspace\\projects\\Test\\src\\main\\resources\\";
			String fName = "dummy.xml";
			String xmlString = XmlUtil.xmlFile2String(fPath, fName);
			
			DatatypeFactory df;
			Unmarshaller unmarshaller;
			InputSource inSource = new InputSource(xmlString);
			unmarshaller = JAXBContext.newInstance(
					DUMMY.XML_CONTEXT_CLASS_PATH).createUnmarshaller();
			LogistikML result = (LogistikML) unmarshaller.unmarshal(inSource);
			System.out.println("ende");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
 
Versuch mal
Java:
LogistikML result = (LogistikML) unmarshaller.unmarshal(new File(path,name));

Denn dein InputSource bekommt eine URL und nicht den XML-String:
public InputSource(String systemId)

Create a new input source with a system identifier.

Applications may use setPublicId to include a public identifier as well, or setEncoding to specify the character encoding, if known.

If the system identifier is a URL, it must be fully resolved (it may not be a relative URL).

Parameters:
systemId - The system identifier (URI).
 
Ja danke, bin auch grad draufgekommen, habs nun so gelöst:
Code:
InputSource inSource = new InputSource(new StringReader(xmlString));

danke.
mfg
 
Zurück