//}
Block block = null;
JAXBBlockContext context = new JAXBBlockContext(packages);
AttachmentDescription attachmentDesc = pd.getAttachmentDescription();
if (attachmentDesc == null) {
boolean isBase64Binary = byte[].class.equals(javaType[i]);
// In most cases the entire java object is unmarshalled.
// But in some cases, the java object is a series of
// elements.
boolean unmarshalComponents = false;
if (pd.isListType() ||
javaComponentType[i] == null ||
isBase64Binary) {
context.setProcessType(javaType[i]);
context.setIsxmlList(pd.isListType());
} else {
context.setProcessType(javaComponentType[i]);
unmarshalComponents = true;
}
// Unmarshal the object into a JAXB object or JAXBElement
Element element = null;
if (pd.isHeader()) {
if (log.isDebugEnabled()) {
log.debug(" get block from the headers");
}
// Get the Block from the header
// NOTE The parameter name is always used to get the header
// element
String localName = pd.getParameterName();
block = message.getHeaderBlock(pd.getTargetNamespace(),
localName,
context,
factory);
element = new Element(block.getBusinessObject(true),
block.getQName());
} else if (firstIndex[i] >= 0) {
if (log.isDebugEnabled()) {
log.debug(" get block from the " + firstIndex[i] +
" to the " + lastIndex[i]);
}
// You must use this method if there are more than one body block
// This method may cause OM expansion
if (unmarshalComponents) {
Object container = makeContainer(javaType[i],
javaComponentType[i],
(lastIndex[i] - firstIndex[i]) + 1);
for (int blockI=firstIndex[i]; blockI<=lastIndex[i]; blockI++) {
block = message.getBodyBlock(blockI, context, factory);
Object value = block.getBusinessObject(true);
if (value instanceof JAXBElement) {
value = ((JAXBElement) value).getValue();
}
if (log.isDebugEnabled()) {
log.debug(" get Business Object " + JavaUtils.getObjectIdentity(value) + " from block " + blockI);
}
addComponent(container, value, blockI - firstIndex[i]);
}
element = new Element(container,
block.getQName());
} else {
block = message.getBodyBlock(firstIndex[i], context, factory);
element = new Element(block.getBusinessObject(true),
block.getQName());
}
} else {
// Missing parameter
if (log.isDebugEnabled()) {
log.debug(" there is no block for this parameter.");
}
QName qName = new QName(pd.getTargetNamespace(), pd.getPartName());
if (!unmarshalComponents) {
element = new Element(null, qName);
} else {
Object container = makeContainer(javaType[i],
javaComponentType[i], 0);
element = new Element(container, qName);
}
}
PDElement pde =
new PDElement(pd, element, javaComponentType[i] == null ? null
: javaComponentType[i]);
pdeList.add(pde);
} else {
// Attachment Processing
if (attachmentDesc.getAttachmentType() == AttachmentType.SWA) {
String partName = pd.getPartName();
String cid = null;
if (log.isDebugEnabled()) {
log.debug("Getting the attachment dataHandler for partName=" + partName);
}