blob: fe141547baef9965889643aad1579b9df2c25290 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package javax.xml.bind.helpers;
import java.io.File;
import java.io.InputStream;
import java.io.Reader;
import java.net.URL;
import java.net.MalformedURLException;
import javax.xml.bind.Unmarshaller;
import javax.xml.bind.ValidationEventHandler;
import javax.xml.bind.UnmarshallerHandler;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.UnmarshalException;
import javax.xml.bind.JAXBException;
import javax.xml.bind.PropertyException;
import javax.xml.bind.attachment.AttachmentUnmarshaller;
import javax.xml.bind.annotation.adapters.XmlAdapter;
import javax.xml.validation.Schema;
import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamSource;
import javax.xml.transform.sax.SAXSource;
import javax.xml.transform.dom.DOMSource;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLStreamReader;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParserFactory;
import org.w3c.dom.Node;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
public abstract class AbstractUnmarshallerImpl implements Unmarshaller {
protected boolean validating;
private ValidationEventHandler eventHandler;
private XMLReader reader;
protected UnmarshalException createUnmarshalException(SAXException e) {
Exception nested = e.getException();
if (nested instanceof UnmarshalException) {
return (UnmarshalException)nested;
} else if(nested instanceof RuntimeException) {
throw (RuntimeException)nested;
} else if (nested != null) {
return new UnmarshalException(nested);
} else {
return new UnmarshalException(e);
}
}
protected XMLReader getXMLReader() throws JAXBException {
if (reader == null) {
try {
SAXParserFactory parserFactory = SAXParserFactory.newInstance();
parserFactory.setNamespaceAware(true);
parserFactory.setValidating(false);
reader = parserFactory.newSAXParser().getXMLReader();
} catch(ParserConfigurationException e) {
throw new JAXBException(e);
} catch(SAXException e) {
throw new JAXBException(e);
}
}
return reader;
}
public <A extends XmlAdapter> A getAdapter(Class<A> type) {
throw new UnsupportedOperationException();
}
public AttachmentUnmarshaller getAttachmentUnmarshaller() {
throw new UnsupportedOperationException();
}
public ValidationEventHandler getEventHandler() throws JAXBException {
return eventHandler;
}
public Listener getListener() {
throw new UnsupportedOperationException();
}
public Object getProperty(String name) throws PropertyException {
if(name == null) {
throw new IllegalArgumentException("name must not be null");
}
throw new PropertyException(name);
}
public Schema getSchema() {
throw new UnsupportedOperationException();
}
public boolean isValidating() throws JAXBException {
return validating;
}
public <A extends XmlAdapter> void setAdapter(Class<A> type, A adapter) {
throw new UnsupportedOperationException();
}
public void setAdapter(XmlAdapter adapter) {
if (adapter == null) {
throw new IllegalArgumentException();
}
setAdapter((Class<XmlAdapter>) adapter.getClass(), adapter);
}
public void setAttachmentUnmarshaller(AttachmentUnmarshaller au) {
throw new UnsupportedOperationException();
}
public void setEventHandler(ValidationEventHandler handler) throws JAXBException {
if (handler == null) {
handler = new DefaultValidationEventHandler();
}
eventHandler = handler;
}
public void setListener(Listener listener) {
throw new UnsupportedOperationException();
}
public void setProperty(String name, Object value) throws PropertyException {
if(name == null) {
throw new IllegalArgumentException("name must not be null");
}
throw new PropertyException(name, value);
}
public void setSchema(Schema schema) {
throw new UnsupportedOperationException();
}
public void setValidating(boolean validating) throws JAXBException {
this.validating = validating;
}
public final Object unmarshal(File file) throws JAXBException {
if (file == null) {
throw new IllegalArgumentException("file must not be null");
}
try
{
String path = file.getAbsolutePath();
if (File.separatorChar != '/') {
path = path.replace(File.separatorChar, '/');
}
if (!path.startsWith("/")) {
path = "/" + path;
}
if (!path.endsWith("/") && file.isDirectory()) {
path = path + "/";
}
return unmarshal(new URL("file", "", path));
}
catch(MalformedURLException e) {
throw new IllegalArgumentException(e.getMessage());
}
}
public final Object unmarshal(InputSource source) throws JAXBException {
if (source == null) {
throw new IllegalArgumentException("source must not be null");
}
return unmarshal(getXMLReader(), source);
}
public final Object unmarshal(InputStream is) throws JAXBException {
if (is == null) {
throw new IllegalArgumentException("is must not be null");
}
return unmarshal(new InputSource(is));
}
public <T> JAXBElement<T> unmarshal(Node node, Class<T> declaredType) throws JAXBException {
throw new UnsupportedOperationException();
}
public final Object unmarshal(Reader reader) throws JAXBException {
if (reader == null) {
throw new IllegalArgumentException("reader must not be null");
}
return unmarshal(new InputSource(reader));
}
public Object unmarshal(Source source) throws JAXBException {
if (source == null) {
throw new IllegalArgumentException("source must not be null");
} else if (source instanceof SAXSource) {
SAXSource saxSource = (SAXSource) source;
XMLReader reader = saxSource.getXMLReader();
if (reader == null) {
reader = getXMLReader();
}
return unmarshal(reader, saxSource.getInputSource());
} else if (source instanceof StreamSource) {
StreamSource ss = (StreamSource) source;
InputSource is = new InputSource();
is.setSystemId(ss.getSystemId());
is.setByteStream(ss.getInputStream());
is.setCharacterStream(ss.getReader());
return unmarshal(is);
} else if (source instanceof DOMSource)
return unmarshal(((DOMSource) source).getNode());
else
throw new IllegalArgumentException();
}
protected abstract Object unmarshal(XMLReader xmlreader, InputSource inputsource) throws JAXBException;
public <T> JAXBElement<T> unmarshal(Source source, Class<T> declaredType) throws JAXBException {
throw new UnsupportedOperationException();
}
public final Object unmarshal(URL url) throws JAXBException {
if(url == null) {
throw new IllegalArgumentException("url must not be null");
}
return unmarshal(new InputSource(url.toExternalForm()));
}
public Object unmarshal(XMLEventReader reader) throws JAXBException {
throw new UnsupportedOperationException();
}
public <T> JAXBElement<T> unmarshal(XMLEventReader reader, Class<T> declaredType) throws JAXBException {
throw new UnsupportedOperationException();
}
public Object unmarshal(XMLStreamReader reader) throws JAXBException {
throw new UnsupportedOperationException();
}
public <T> JAXBElement<T> unmarshal(XMLStreamReader reader, Class<T> declaredType) throws JAXBException {
throw new UnsupportedOperationException();
}
}