private void save(XMLDocument xmlDocument, Writer outputWriter, XMLMarshaller anXMLMarshaller) throws IOException { if (xmlDocument == null) { throw new IllegalArgumentException( SDOException.cannotPerformOperationWithNullInputParameter("save", "xmlDocument")); } // Ask the SDOXMLDocument if we should include the XML declaration in the resulting XML anXMLMarshaller.setFragment(!xmlDocument.isXMLDeclaration()); anXMLMarshaller.setEncoding(xmlDocument.getEncoding()); anXMLMarshaller.setSchemaLocation(xmlDocument.getSchemaLocation()); anXMLMarshaller.setNoNamespaceSchemaLocation(xmlDocument.getNoNamespaceSchemaLocation()); WriterRecord writerRecord; if (anXMLMarshaller.isFormattedOutput()) { writerRecord = new FormattedWriterRecord(); } else { writerRecord = new WriterRecord(); } writerRecord.setWriter(outputWriter); writerRecord.setMarshaller(anXMLMarshaller); ((SDOMarshalListener) anXMLMarshaller.getMarshalListener()) .setMarshalledObject(xmlDocument.getRootObject()); ((SDOMarshalListener) anXMLMarshaller.getMarshalListener()) .setMarshalledObjectRootQName( new QName(xmlDocument.getRootElementURI(), xmlDocument.getRootElementName())); ((SDOMarshalListener) anXMLMarshaller.getMarshalListener()).setRootMarshalRecord(writerRecord); anXMLMarshaller.marshal(xmlDocument, writerRecord); outputWriter.flush(); }
public void save(XMLDocument xmlDocument, Result result, Object options) throws IOException { if (xmlDocument == null) { throw new IllegalArgumentException( SDOException.cannotPerformOperationWithNullInputParameter("save", "xmlDocument")); } if (result instanceof StreamResult) { StreamResult streamResult = (StreamResult) result; Writer writer = streamResult.getWriter(); if (null == writer) { save(xmlDocument, streamResult.getOutputStream(), options); } else { save(xmlDocument, writer, options); } } else { // get XMLMarshaller once - as we may create a new instance if this helper isDirty=true XMLMarshaller anXMLMarshaller = getXmlMarshaller(options); // Ask the SDOXMLDocument if we should include the XML declaration in the resulting XML anXMLMarshaller.setFragment(!xmlDocument.isXMLDeclaration()); anXMLMarshaller.setEncoding(xmlDocument.getEncoding()); anXMLMarshaller.setSchemaLocation(xmlDocument.getSchemaLocation()); anXMLMarshaller.setNoNamespaceSchemaLocation(xmlDocument.getNoNamespaceSchemaLocation()); ((SDOMarshalListener) anXMLMarshaller.getMarshalListener()) .setMarshalledObject(xmlDocument.getRootObject()); ((SDOMarshalListener) anXMLMarshaller.getMarshalListener()) .setMarshalledObjectRootQName( new QName(xmlDocument.getRootElementURI(), xmlDocument.getRootElementName())); if (result instanceof SAXResult) { ContentHandlerRecord marshalRecord = new ContentHandlerRecord(); marshalRecord.setContentHandler(((SAXResult) result).getHandler()); marshalRecord.setMarshaller(anXMLMarshaller); ((SDOMarshalListener) anXMLMarshaller.getMarshalListener()) .setRootMarshalRecord(marshalRecord); anXMLMarshaller.marshal(xmlDocument, marshalRecord); } else if (result instanceof DOMResult) { NodeRecord marshalRecord = new NodeRecord(); marshalRecord.setDOM(((DOMResult) result).getNode()); marshalRecord.setMarshaller(anXMLMarshaller); ((SDOMarshalListener) anXMLMarshaller.getMarshalListener()) .setRootMarshalRecord(marshalRecord); anXMLMarshaller.marshal(xmlDocument, marshalRecord); } else { StringWriter writer = new StringWriter(); this.save(xmlDocument, writer, options); String xml = writer.toString(); StreamSource source = new StreamSource(new java.io.StringReader(xml)); anXMLMarshaller.getTransformer().transform(source, result); } } }
private void save(XMLDocument xmlDocument, Writer outputWriter, XMLMarshaller anXMLMarshaller) throws IOException { if (xmlDocument == null) { throw new IllegalArgumentException( SDOException.cannotPerformOperationWithNullInputParameter("save", "xmlDocument")); } // Ask the SDOXMLDocument if we should include the XML declaration in the resulting XML anXMLMarshaller.setFragment(!xmlDocument.isXMLDeclaration()); anXMLMarshaller.setEncoding(xmlDocument.getEncoding()); anXMLMarshaller.setSchemaLocation(xmlDocument.getSchemaLocation()); anXMLMarshaller.setNoNamespaceSchemaLocation(xmlDocument.getNoNamespaceSchemaLocation()); WriterRecord writerRecord; if (anXMLMarshaller.isFormattedOutput()) { writerRecord = new FormattedWriterRecord(); } else { writerRecord = new WriterRecord(); } writerRecord.setWriter(outputWriter); writerRecord.setMarshaller(anXMLMarshaller); ((SDOMarshalListener) anXMLMarshaller.getMarshalListener()) .setMarshalledObject(xmlDocument.getRootObject()); ((SDOMarshalListener) anXMLMarshaller.getMarshalListener()) .setMarshalledObjectRootQName( new QName(xmlDocument.getRootElementURI(), xmlDocument.getRootElementName())); ((SDOMarshalListener) anXMLMarshaller.getMarshalListener()).setRootMarshalRecord(writerRecord); try { anXMLMarshaller.marshal(xmlDocument, writerRecord); } catch (XMLMarshalException xme) { if (xme.getErrorCode() == XMLMarshalException.DESCRIPTOR_NOT_FOUND_IN_PROJECT) { if (aHelperContext != ((SDOType) xmlDocument.getRootObject().getType()).getHelperContext()) { throw SDOException.dataObjectNotFromHelperContext(); } } } outputWriter.flush(); }
/** * Set a property on the JAXBMarshaller. Attempting to set any unsupported property will result in * a javax.xml.bind.PropertyException * * @see org.eclipse.persistence.jaxb.MarshallerProperties */ public void setProperty(String key, Object value) throws PropertyException { try { if (key == null) { throw new IllegalArgumentException(); } else if (Constants.JAXB_FRAGMENT.equals(key)) { if (value == null) { throw new PropertyException(key, Constants.EMPTY_STRING); } Boolean fragment = (Boolean) value; xmlMarshaller.setFragment(fragment.booleanValue()); } else if (JAXB_FORMATTED_OUTPUT.equals(key)) { if (value == null) { throw new PropertyException(key, Constants.EMPTY_STRING); } Boolean formattedOutput = (Boolean) value; xmlMarshaller.setFormattedOutput(formattedOutput.booleanValue()); } else if (JAXB_ENCODING.equals(key)) { xmlMarshaller.setEncoding((String) value); } else if (JAXB_SCHEMA_LOCATION.equals(key)) { xmlMarshaller.setSchemaLocation((String) value); } else if (JAXB_NO_NAMESPACE_SCHEMA_LOCATION.equals(key)) { xmlMarshaller.setNoNamespaceSchemaLocation((String) value); } else if (MarshallerProperties.NAMESPACE_PREFIX_MAPPER.equals(key)) { if (value == null) { xmlMarshaller.setNamespacePrefixMapper(null); } else if (value instanceof Map) { NamespacePrefixMapper namespacePrefixMapper = new MapNamespacePrefixMapper((Map) value); xmlMarshaller.setNamespacePrefixMapper(namespacePrefixMapper); } else { xmlMarshaller.setNamespacePrefixMapper((NamespacePrefixMapper) value); } } else if (SUN_NAMESPACE_PREFIX_MAPPER.equals(key) || SUN_JSE_NAMESPACE_PREFIX_MAPPER.equals(key)) { if (value == null) { xmlMarshaller.setNamespacePrefixMapper(null); } else { xmlMarshaller.setNamespacePrefixMapper(new NamespacePrefixMapperWrapper(value)); } } else if (MarshallerProperties.INDENT_STRING.equals(key) || SUN_INDENT_STRING.equals(key) || SUN_JSE_INDENT_STRING.equals(key)) { xmlMarshaller.setIndentString((String) value); } else if (MarshallerProperties.JSON_MARSHAL_EMPTY_COLLECTIONS.equals(key)) { xmlMarshaller.setMarshalEmptyCollections((Boolean) value); } else if (MarshallerProperties.JSON_REDUCE_ANY_ARRAYS.equals(key)) { xmlMarshaller.setReduceAnyArrays((Boolean) value); } else if (MarshallerProperties.JSON_WRAPPER_AS_ARRAY_NAME.equals(key)) { xmlMarshaller.setWrapperAsCollectionName((Boolean) value); } else if (MarshallerProperties.CHARACTER_ESCAPE_HANDLER.equals(key)) { xmlMarshaller.setCharacterEscapeHandler((CharacterEscapeHandler) value); } else if (SUN_CHARACTER_ESCAPE_HANDLER.equals(key) || SUN_JSE_CHARACTER_ESCAPE_HANDLER.equals(key)) { if (value == null) { xmlMarshaller.setCharacterEscapeHandler(null); } else { xmlMarshaller.setCharacterEscapeHandler(new CharacterEscapeHandlerWrapper(value)); } } else if (XML_DECLARATION.equals(key)) { if (value == null) { throw new PropertyException(key, Constants.EMPTY_STRING); } Boolean fragment = !(Boolean) value; xmlMarshaller.setFragment(fragment.booleanValue()); } else if (XML_HEADERS.equals(key)) { xmlMarshaller.setXmlHeader((String) value); } else if (OBJECT_IDENTITY_CYCLE_DETECTION.equals(key)) { if (value == null) { throw new PropertyException(key, Constants.EMPTY_STRING); } xmlMarshaller.setEqualUsingIdenity(((Boolean) value).booleanValue()); } else if (MarshallerProperties.MEDIA_TYPE.equals(key)) { MediaType mType = null; if (value instanceof MediaType) { mType = (MediaType) value; } else if (value instanceof String) { mType = MediaType.getMediaType((String) value); } if (mType == null) { throw new PropertyException(key, Constants.EMPTY_STRING); } xmlMarshaller.setMediaType(mType); } else if (MarshallerProperties.JSON_ATTRIBUTE_PREFIX.equals(key)) { xmlMarshaller.setAttributePrefix((String) value); } else if (MarshallerProperties.JSON_INCLUDE_ROOT.equals(key)) { if (value == null) { throw new PropertyException(key, Constants.EMPTY_STRING); } xmlMarshaller.setIncludeRoot((Boolean) value); } else if (MarshallerProperties.JSON_VALUE_WRAPPER.equals(key)) { if (value == null || (((String) value).length() == 0)) { throw new PropertyException(key, Constants.EMPTY_STRING); } xmlMarshaller.setValueWrapper((String) value); } else if (MarshallerProperties.JSON_NAMESPACE_SEPARATOR.equals(key)) { if (value == null) { throw new PropertyException(key, Constants.EMPTY_STRING); } xmlMarshaller.setNamespaceSeparator((Character) value); } else if (MarshallerProperties.OBJECT_GRAPH.equals(key)) { if (value == null) { xmlMarshaller.setMarshalAttributeGroup(null); } else if (value instanceof ObjectGraphImpl) { xmlMarshaller.setMarshalAttributeGroup(((ObjectGraphImpl) value).getAttributeGroup()); } else if (value.getClass() == ClassConstants.STRING) { xmlMarshaller.setMarshalAttributeGroup(value); } else { throw org.eclipse.persistence.exceptions.JAXBException.invalidValueForObjectGraph(value); } } else { throw new PropertyException(key, value); } } catch (ClassCastException exception) { throw new PropertyException(key, exception); } }