Program: 67230
Project: 67230
Buggy source:
public void marshalSingleValue(XPathFragment xPathFragment,MarshalRecord marshalRecord,Object object,Object objectValue,AbstractSession session,NamespaceResolver namespaceResolver,MarshalContext marshalContext){
  if (objectValue == null) {
    return;
  }
  boolean addDeclaration=false;
  boolean removePrefix=false;
  String xopPrefix=null;
  if (namespaceResolver != null) {
    xopPrefix=namespaceResolver.resolveNamespaceURI(XMLConstants.XOP_URL);
  }
  if (xopPrefix == null) {
    addDeclaration=true;
    xopPrefix=marshalRecord.getNamespaceResolver().resolveNamespaceURI(XMLConstants.XOP_URL);
    if (xopPrefix == null) {
      removePrefix=true;
      xopPrefix=XMLConstants.XOP_PREFIX;
      marshalRecord.getNamespaceResolver().put(xopPrefix,XMLConstants.XOP_URL);
    }
    namespaceResolver=marshalRecord.getNamespaceResolver();
  }
  XMLMarshaller marshaller=marshalRecord.getMarshaller();
  if (xmlBinaryDataCollectionMapping.getValueConverter() != null) {
    Converter converter=xmlBinaryDataCollectionMapping.getValueConverter();
    if (converter instanceof XMLConverter) {
      objectValue=((XMLConverter)converter).convertObjectValueToDataValue(objectValue,session,marshaller);
    }
 else {
      objectValue=converter.convertObjectValueToDataValue(objectValue,session);
    }
  }
  XPathFragment groupingFragment=marshalRecord.openStartGroupingElements(namespaceResolver);
  marshalRecord.closeStartGroupingElements(groupingFragment);
  marshalRecord.openStartElement(xPathFragment,namespaceResolver);
  marshalRecord.closeStartElement();
  if (xmlBinaryDataCollectionMapping.isSwaRef() && marshaller.getAttachmentMarshaller() != null) {
    String c_id=null;
    if (xmlBinaryDataCollectionMapping.getAttributeClassification() == XMLBinaryDataHelper.getXMLBinaryDataHelper().DATA_HANDLER) {
      c_id=marshaller.getAttachmentMarshaller().addSwaRefAttachment((DataHandler)objectValue);
    }
 else {
      XMLBinaryDataHelper.EncodedData data=XMLBinaryDataHelper.getXMLBinaryDataHelper().getBytesForBinaryValue(objectValue,marshaller,xmlBinaryDataCollectionMapping.getMimeType(object));
      byte[] bytes=data.getData();
      c_id=marshaller.getAttachmentMarshaller().addSwaRefAttachment(bytes,0,bytes.length);
    }
    marshalRecord.characters(c_id);
  }
 else {
    if (marshalRecord.isXOPPackage() && !xmlBinaryDataCollectionMapping.shouldInlineBinaryData()) {
      XPathFragment lastFrag=((XMLField)xmlBinaryDataCollectionMapping.getField()).getLastXPathFragment();
      String c_id="String_Node_Str";
      if (objectValue.getClass() == ClassConstants.APBYTE) {
        byte[] bytes=(byte[])objectValue;
        c_id=marshaller.getAttachmentMarshaller().addMtomAttachment(bytes,0,bytes.length,lastFrag.getLocalName(),lastFrag.getNamespaceURI(),null);
      }
 else       if (xmlBinaryDataCollectionMapping.getAttributeClassification() == XMLBinaryDataHelper.getXMLBinaryDataHelper().DATA_HANDLER) {
        c_id=marshaller.getAttachmentMarshaller().addMtomAttachment((DataHandler)objectValue,lastFrag.getLocalName(),lastFrag.getNamespaceURI());
      }
 else {
        XMLBinaryDataHelper.EncodedData data=XMLBinaryDataHelper.getXMLBinaryDataHelper().getBytesForBinaryValue(objectValue,marshaller,xmlBinaryDataCollectionMapping.getMimeTypePolicy().getMimeType(object));
        byte[] bytes=data.getData();
        c_id=marshaller.getAttachmentMarshaller().addMtomAttachment(bytes,0,bytes.length,data.getMimeType(),lastFrag.getLocalName(),lastFrag.getNamespaceURI());
      }
      XPathFragment xopInclude=new XPathFragment(xopPrefix + "String_Node_Str");
      xopInclude.setNamespaceURI(XMLConstants.XOP_URL);
      marshalRecord.openStartElement(xopInclude,namespaceResolver);
      marshalRecord.attribute("String_Node_Str","String_Node_Str","String_Node_Str",c_id);
      if (addDeclaration) {
        marshalRecord.attribute(XMLConstants.XMLNS_URL,xopPrefix,XMLConstants.XMLNS + "String_Node_Str" + xopPrefix,XMLConstants.XOP_URL);
      }
      marshalRecord.closeStartElement();
      marshalRecord.endElement(xPathFragment,namespaceResolver);
    }
 else {
      String value="String_Node_Str";
      if (objectValue.getClass() == ClassConstants.ABYTE || objectValue.getClass() == ClassConstants.APBYTE) {
        value=getValueToWrite(((XMLField)xmlBinaryDataCollectionMapping.getField()).getSchemaType(),objectValue,session);
      }
 else {
        byte[] bytes=XMLBinaryDataHelper.getXMLBinaryDataHelper().getBytesForBinaryValue(objectValue,marshaller,xmlBinaryDataCollectionMapping.getMimeTypePolicy().getMimeType(object)).getData();
        value=getValueToWrite(((XMLField)xmlBinaryDataCollectionMapping.getField()).getSchemaType(),bytes,session);
      }
      marshalRecord.characters(value);
    }
  }
  marshalRecord.endElement(xPathFragment,namespaceResolver);
  if (removePrefix) {
    marshalRecord.getNamespaceResolver().removeNamespace(XMLConstants.XOP_PREFIX);
  }
}

Fixed version (ground truth):
public void marshalSingleValue(XPathFragment xPathFragment,MarshalRecord marshalRecord,Object object,Object objectValue,AbstractSession session,NamespaceResolver namespaceResolver,MarshalContext marshalContext){
  if (objectValue == null) {
    return;
  }
  boolean addDeclaration=false;
  boolean removePrefix=false;
  String xopPrefix=null;
  if (namespaceResolver != null) {
    xopPrefix=namespaceResolver.resolveNamespaceURI(XMLConstants.XOP_URL);
  }
  if (xopPrefix == null) {
    addDeclaration=true;
    xopPrefix=marshalRecord.getNamespaceResolver().resolveNamespaceURI(XMLConstants.XOP_URL);
    if (xopPrefix == null) {
      removePrefix=true;
      xopPrefix=XMLConstants.XOP_PREFIX;
      marshalRecord.getNamespaceResolver().put(xopPrefix,XMLConstants.XOP_URL);
    }
    namespaceResolver=marshalRecord.getNamespaceResolver();
  }
  XMLMarshaller marshaller=marshalRecord.getMarshaller();
  if (xmlBinaryDataCollectionMapping.getValueConverter() != null) {
    Converter converter=xmlBinaryDataCollectionMapping.getValueConverter();
    if (converter instanceof XMLConverter) {
      objectValue=((XMLConverter)converter).convertObjectValueToDataValue(objectValue,session,marshaller);
    }
 else {
      objectValue=converter.convertObjectValueToDataValue(objectValue,session);
    }
  }
  XPathFragment groupingFragment=marshalRecord.openStartGroupingElements(namespaceResolver);
  marshalRecord.closeStartGroupingElements(groupingFragment);
  marshalRecord.openStartElement(xPathFragment,namespaceResolver);
  marshalRecord.closeStartElement();
  if (xmlBinaryDataCollectionMapping.isSwaRef() && marshaller.getAttachmentMarshaller() != null) {
    String c_id=null;
    if (xmlBinaryDataCollectionMapping.getAttributeClassification() == XMLBinaryDataHelper.getXMLBinaryDataHelper().DATA_HANDLER) {
      c_id=marshaller.getAttachmentMarshaller().addSwaRefAttachment((DataHandler)objectValue);
    }
 else {
      XMLBinaryDataHelper.EncodedData data=XMLBinaryDataHelper.getXMLBinaryDataHelper().getBytesForBinaryValue(objectValue,marshaller,xmlBinaryDataCollectionMapping.getMimeType(object));
      byte[] bytes=data.getData();
      c_id=marshaller.getAttachmentMarshaller().addSwaRefAttachment(bytes,0,bytes.length);
    }
    marshalRecord.characters(c_id);
  }
 else {
    if (marshalRecord.isXOPPackage() && !xmlBinaryDataCollectionMapping.shouldInlineBinaryData()) {
      XPathFragment lastFrag=((XMLField)xmlBinaryDataCollectionMapping.getField()).getLastXPathFragment();
      String c_id="String_Node_Str";
      if (objectValue.getClass() == ClassConstants.APBYTE) {
        byte[] bytes=(byte[])objectValue;
        c_id=marshaller.getAttachmentMarshaller().addMtomAttachment(bytes,0,bytes.length,this.xmlBinaryDataCollectionMapping.getMimeType(),lastFrag.getLocalName(),lastFrag.getNamespaceURI());
      }
 else       if (xmlBinaryDataCollectionMapping.getAttributeClassification() == XMLBinaryDataHelper.getXMLBinaryDataHelper().DATA_HANDLER) {
        c_id=marshaller.getAttachmentMarshaller().addMtomAttachment((DataHandler)objectValue,lastFrag.getLocalName(),lastFrag.getNamespaceURI());
      }
 else {
        XMLBinaryDataHelper.EncodedData data=XMLBinaryDataHelper.getXMLBinaryDataHelper().getBytesForBinaryValue(objectValue,marshaller,xmlBinaryDataCollectionMapping.getMimeTypePolicy().getMimeType(object));
        byte[] bytes=data.getData();
        c_id=marshaller.getAttachmentMarshaller().addMtomAttachment(bytes,0,bytes.length,data.getMimeType(),lastFrag.getLocalName(),lastFrag.getNamespaceURI());
      }
      XPathFragment xopInclude=new XPathFragment(xopPrefix + "String_Node_Str");
      xopInclude.setNamespaceURI(XMLConstants.XOP_URL);
      marshalRecord.openStartElement(xopInclude,namespaceResolver);
      marshalRecord.attribute("String_Node_Str","String_Node_Str","String_Node_Str",c_id);
      if (addDeclaration) {
        marshalRecord.attribute(XMLConstants.XMLNS_URL,xopPrefix,XMLConstants.XMLNS + "String_Node_Str" + xopPrefix,XMLConstants.XOP_URL);
      }
      marshalRecord.closeStartElement();
      marshalRecord.endElement(xPathFragment,namespaceResolver);
    }
 else {
      String value="String_Node_Str";
      if (objectValue.getClass() == ClassConstants.ABYTE || objectValue.getClass() == ClassConstants.APBYTE) {
        value=getValueToWrite(((XMLField)xmlBinaryDataCollectionMapping.getField()).getSchemaType(),objectValue,session);
      }
 else {
        byte[] bytes=XMLBinaryDataHelper.getXMLBinaryDataHelper().getBytesForBinaryValue(objectValue,marshaller,xmlBinaryDataCollectionMapping.getMimeTypePolicy().getMimeType(object)).getData();
        value=getValueToWrite(((XMLField)xmlBinaryDataCollectionMapping.getField()).getSchemaType(),bytes,session);
      }
      marshalRecord.characters(value);
    }
  }
  marshalRecord.endElement(xPathFragment,namespaceResolver);
  if (removePrefix) {
    marshalRecord.getNamespaceResolver().removeNamespace(XMLConstants.XOP_PREFIX);
  }
}