public UnmappedContentHandlerWrapper( UnmarshalRecord parentRecord, UnmappedContentHandler unmappedContentHandler) { super(null); this.depth = 0; this.unmappedContentHandler = unmappedContentHandler; setParentRecord(parentRecord); setUnmarshaller(parentRecord.getUnmarshaller()); setXMLReader(parentRecord.getXMLReader()); setUnmarshalNamespaceResolver(parentRecord.getUnmarshalNamespaceResolver()); unmappedContentHandler.setUnmarshalRecord(this); }
public boolean startElement( XPathFragment xPathFragment, UnmarshalRecord unmarshalRecord, Attributes atts) { try { XMLField xmlField = (XMLField) xmlBinaryDataCollectionMapping.getField(); XPathFragment lastFragment = xmlField.getLastXPathFragment(); if (!lastFragment.isAttribute()) { // set a new content handler to deal with the Include element's event. BinaryMappingContentHandler handler = new BinaryMappingContentHandler( unmarshalRecord, this, this.xmlBinaryDataCollectionMapping); String qnameString = xPathFragment.getLocalName(); if (xPathFragment.getPrefix() != null) { qnameString = xPathFragment.getPrefix() + XMLConstants.COLON + qnameString; } handler.startElement( xPathFragment.getNamespaceURI(), xPathFragment.getLocalName(), qnameString, atts); unmarshalRecord.getXMLReader().setContentHandler(handler); } else if (lastFragment.isAttribute()) { // handle swaRef and inline attribute cases here: String value = atts.getValue(lastFragment.getNamespaceURI(), lastFragment.getLocalName()); Object fieldValue = null; if (xmlBinaryDataCollectionMapping.isSwaRef()) { if (unmarshalRecord.getUnmarshaller().getAttachmentUnmarshaller() != null) { if (xmlBinaryDataCollectionMapping.getAttributeClassification() == XMLBinaryDataHelper.getXMLBinaryDataHelper().DATA_HANDLER) { fieldValue = unmarshalRecord .getUnmarshaller() .getAttachmentUnmarshaller() .getAttachmentAsDataHandler(value); } else { fieldValue = unmarshalRecord .getUnmarshaller() .getAttachmentUnmarshaller() .getAttachmentAsByteArray(value); } xmlBinaryDataCollectionMapping.setAttributeValueInObject( unmarshalRecord.getCurrentObject(), XMLBinaryDataHelper.getXMLBinaryDataHelper() .convertObject( fieldValue, xmlBinaryDataCollectionMapping.getAttributeClassification(), unmarshalRecord.getSession())); } } else { // value should be base64 binary string fieldValue = ((XMLConversionManager) unmarshalRecord.getSession().getDatasourcePlatform().getConversionManager()) .convertSchemaBase64ToByteArray(value); xmlBinaryDataCollectionMapping.setAttributeValueInObject( unmarshalRecord.getCurrentObject(), XMLBinaryDataHelper.getXMLBinaryDataHelper() .convertObject( fieldValue, xmlBinaryDataCollectionMapping.getAttributeClassification(), unmarshalRecord.getSession())); } } return true; } catch (SAXException ex) { throw XMLMarshalException.unmarshalException(ex); } }