catch (SOAPException se) {
throw new WebServiceException(se.getMessage());
}
if (body == null) {
SOAPFault soapFault = null;
try {
soapFault = getSOAPFactory().createFault(
"SOAPMessage request format error - missing body element",
new QName(URI_NS_SOAP_1_1_ENVELOPE, "Client"));
}
catch (SOAPException se) {
/* safe to ignore */
}
throw new SOAPFaultException(soapFault);
}
XMLRoot xmlRoot = null;
try {
XMLContext xmlContext = dbwsAdapter.getXMLContext();
xmlRoot = (XMLRoot)xmlContext.createUnmarshaller().unmarshal(body,
Invocation.class);
}
catch (XMLMarshalException e) {
SOAPFault soapFault = null;
try {
soapFault = getSOAPFactory().createFault("SOAPMessage request format error - " +
e.getMessage(),new QName(URI_NS_SOAP_1_1_ENVELOPE, "Client"));
}
catch (SOAPException se) {
// ignore
}
throw new SOAPFaultException(soapFault);
}
Invocation invocation = (Invocation)xmlRoot.getObject();
invocation.setName(xmlRoot.getLocalName());
Operation op = dbwsAdapter.getOperation(invocation.getName());
/*
* Fix up types for arguments - scan the extended schema for the operation's Request type.
*
* For most parameters, the textual node content is fine, but for date/time and
* binary objects, we must convert
*/
org.eclipse.persistence.internal.oxm.schema.model.Element invocationElement =
(org.eclipse.persistence.internal.oxm.schema.model.Element)
dbwsAdapter.getExtendedSchema().getTopLevelElements().get(invocation.getName());
String typeName = invocationElement.getType();
int idx = typeName.indexOf(':');
if (idx != -1) {
// strip-off any namespace prefix
typeName = typeName.substring(idx+1);
}
ComplexType complexType =
(ComplexType)dbwsAdapter.getExtendedSchema().getTopLevelComplexTypes().get(typeName);
if (complexType.getSequence() != null) {
// for each operation, there is a corresponding top-level Request type
// which has the arguments to the operation
for (Iterator i = complexType.getSequence().getOrderedElements().iterator(); i .hasNext();) {
org.eclipse.persistence.internal.oxm.schema.model.Element e =
(org.eclipse.persistence.internal.oxm.schema.model.Element)i.next();
String argName = e.getName();
Object argValue = invocation.getParameter(argName);
String argType = e.getType();
if (argType != null) {
String argTypePrefix = null;
String nameSpaceURI = null;
idx = argType.indexOf(':');
if (idx != -1) {
argTypePrefix = argType.substring(0,idx);
argType = argType.substring(idx+1);
nameSpaceURI =
dbwsAdapter.getSchema().getNamespaceResolver().resolveNamespacePrefix(argTypePrefix);
}
QName argQName = argTypePrefix == null ? new QName(nameSpaceURI, argType) :
new QName(nameSpaceURI, argType, argTypePrefix);
Class clz = SCHEMA_2_CLASS.get(argQName);
if (clz != null) {
argValue = ((XMLConversionManager)dbwsAdapter.getOXSession().getDatasourcePlatform().
getConversionManager()).convertObject(argValue, clz, argQName);
invocation.setParameter(argName, argValue);
}
}
// incoming attachments ?
}
}
Object result = null;
try {
result = op.invoke(dbwsAdapter, invocation);
if (result instanceof ValueObject) {
result = ((ValueObject)result).value;
}
response = responseWriter.generateResponse(op, result);
}
catch (SOAPException se) {
throw new WebServiceException(se.getMessage());
}
catch (EclipseLinkException ele) {
try {
response = responseWriter.generateResponse(op, ele);
}
catch (SOAPException e) {
SOAPFault soapFault = null;
try {
soapFault = getSOAPFactory().createFault("SOAPMessage response error - " +
e.getMessage(), new QName(URI_NS_SOAP_1_1_ENVELOPE, "Server"));
}
catch (SOAPException se) {