コード例 #1
0
 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);
   }
 }