Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/databinding/impl/JAXBBlockImpl.java URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/databinding/impl/JAXBBlockImpl.java?rev=603038&r1=603037&r2=603038&view=diff ============================================================================== --- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/databinding/impl/JAXBBlockImpl.java (original) +++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/databinding/impl/JAXBBlockImpl.java Mon Dec 10 12:34:39 2007 @@ -18,33 +18,23 @@ */ package org.apache.axis2.jaxws.message.databinding.impl; +import org.apache.axiom.om.OMDataSourceExt; import org.apache.axiom.om.OMElement; -import org.apache.axiom.om.impl.MTOMXMLStreamWriter; +import org.apache.axiom.om.OMException; import org.apache.axiom.om.util.StAXUtils; -import org.apache.axis2.java.security.AccessController; +import org.apache.axis2.datasource.jaxb.JAXBDSContext; +import org.apache.axis2.datasource.jaxb.JAXBDataSource; import org.apache.axis2.jaxws.ExceptionFactory; -import org.apache.axis2.jaxws.core.MessageContext; import org.apache.axis2.jaxws.message.Message; -import org.apache.axis2.jaxws.message.attachments.JAXBAttachmentMarshaller; -import org.apache.axis2.jaxws.message.attachments.JAXBAttachmentUnmarshaller; import org.apache.axis2.jaxws.message.databinding.JAXBBlock; import org.apache.axis2.jaxws.message.databinding.JAXBBlockContext; -import org.apache.axis2.jaxws.message.databinding.JAXBUtils; -import org.apache.axis2.jaxws.message.databinding.XSDListUtils; import org.apache.axis2.jaxws.message.factory.BlockFactory; import org.apache.axis2.jaxws.message.impl.BlockImpl; import org.apache.axis2.jaxws.message.util.XMLStreamWriterWithOS; -import org.apache.axis2.jaxws.spi.Constants; -import org.apache.axis2.jaxws.utility.XMLRootElementUtil; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import javax.xml.bind.JAXBElement; import javax.xml.bind.JAXBException; -import javax.xml.bind.JAXBIntrospector; -import javax.xml.bind.Marshaller; -import javax.xml.bind.Unmarshaller; -import javax.xml.datatype.DatatypeConfigurationException; import javax.xml.namespace.QName; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamReader; @@ -54,12 +44,7 @@ import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.InputStream; -import java.io.OutputStream; import java.io.UnsupportedEncodingException; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.security.PrivilegedAction; -import java.text.ParseException; /** * JAXBBlockImpl <p/> A Block containing a JAXB business object (either a JAXBElement or an object @@ -99,63 +84,24 @@ super(omElement, busContext, qName, factory); } - @Override protected Object _getBOFromReader(XMLStreamReader reader, Object busContext) throws XMLStreamException, WebServiceException { // Get the JAXBBlockContext. All of the necessry information is recorded on it JAXBBlockContext ctx = (JAXBBlockContext) busContext; - // retrieve the stored classloader if it is present - MessageContext msgContext = getParent() != null ? getParent().getMessageContext() : null; - ClassLoader cl = null; - if(msgContext != null) { - cl = (ClassLoader) msgContext.getProperty(Constants.CACHE_CLASSLOADER); - } try { - // TODO Re-evaluate Unmarshall construction w/ MTOM - - Unmarshaller u = JAXBUtils.getJAXBUnmarshaller(ctx.getJAXBContext(cl)); - - if (DEBUG_ENABLED) { - log.debug("Adding JAXBAttachmentUnmarshaller to Unmarshaller"); - } - - Message msg = getParent(); - - JAXBAttachmentUnmarshaller aum = new JAXBAttachmentUnmarshaller(msg); - u.setAttachmentUnmarshaller(aum); - - Object jaxb = null; - - // Unmarshal into the business object. - if (ctx.getProcessType() == null) { - jaxb = unmarshalByElement(u, reader); // preferred and always used for - // style=document - } else { - jaxb = - unmarshalByType(u, - reader, - ctx.getProcessType(), - ctx.isxmlList(), - ctx.getConstructionType()); - } - - // Successfully unmarshalled the object - JAXBUtils.releaseJAXBUnmarshaller(ctx.getJAXBContext(cl), u); - - // Don't close the reader. The reader is owned by the caller, and it - // may contain other xml instance data (other than this JAXB object) - // reader.close(); - return jaxb; + busObject = ctx.unmarshal(reader); } catch (JAXBException je) { if (DEBUG_ENABLED) { try { - log.debug("JAXBContext for unmarshal failure:" + ctx.getJAXBContext(cl)); + log.debug("JAXBContext for unmarshal failure:" + + ctx.getJAXBContext(ctx.getClassLoader())); } catch (Exception e) { } } throw ExceptionFactory.makeWebServiceException(je); } + return busObject; } /** @@ -194,47 +140,13 @@ throws XMLStreamException, WebServiceException { JAXBBlockContext ctx = (JAXBBlockContext) busContext; - // retrieve the stored classloader if it is present - MessageContext msgContext = getParent() != null ? getParent().getMessageContext() : null; - ClassLoader cl = null; - if(msgContext != null) { - cl = (ClassLoader) msgContext.getProperty(Constants.CACHE_CLASSLOADER); - } try { - // Very easy, use the Context to get the Marshaller. - // Use the marshaller to write the object. - Marshaller m = JAXBUtils.getJAXBMarshaller(ctx.getJAXBContext(cl)); - - - if (DEBUG_ENABLED) { - log.debug("Adding JAXBAttachmentMarshaller to Marshaller"); - } - - Message msg = getParent(); - - // Pool - JAXBAttachmentMarshaller am = new JAXBAttachmentMarshaller(msg, writer); - m.setAttachmentMarshaller(am); - - - // Marshal the object - if (ctx.getProcessType() == null) { - marshalByElement(busObject, m, writer, !am.isXOPPackage()); - } else { - marshalByType(busObject, - m, - writer, - ctx.getProcessType(), - ctx.isxmlList(), - ctx.getConstructionType()); - } - - // Successfully marshalled the data - JAXBUtils.releaseJAXBMarshaller(ctx.getJAXBContext(cl), m); + ctx.marshal(busObject, writer); } catch (JAXBException je) { if (DEBUG_ENABLED) { try { - log.debug("JAXBContext for marshal failure:" + ctx.getJAXBContext(cl)); + log.debug("JAXBContext for marshal failure:" + + ctx.getJAXBContext(ctx.getClassLoader())); } catch (Exception e) { } } @@ -242,354 +154,6 @@ } } - /** - * Get the QName from the jaxb object - * - * @param jaxb - * @param jbc - * @throws WebServiceException - */ - private static QName getQName(Object jaxb, JAXBBlockContext ctx, Message msg) throws JAXBException { - - // retrieve the stored classloader if it is present - MessageContext msgContext = msg != null ? msg.getMessageContext() : null; - ClassLoader cl = null; - if(msgContext != null) { - cl = (ClassLoader) msgContext.getProperty(Constants.CACHE_CLASSLOADER); - } - - JAXBIntrospector jbi = JAXBUtils.getJAXBIntrospector(ctx.getJAXBContext(cl)); - QName qName = jbi.getElementName(jaxb); - JAXBUtils.releaseJAXBIntrospector(ctx.getJAXBContext(cl), jbi); - return qName; - } - - /** - * Preferred way to marshal objects. - * - * @param b Object that can be rendered as an element and the element name is known by the - * Marshaller - * @param m Marshaller - * @param writer XMLStreamWriter - */ - private static void marshalByElement(final Object b, final Marshaller m, - final XMLStreamWriter writer, - final boolean optimize) throws WebServiceException { - AccessController.doPrivileged(new PrivilegedAction() { - public Object run() { - // Marshalling directly to the output stream is faster than marshalling through the - // XMLStreamWriter. - // Take advantage of this optimization if there is an output stream. - try { - OutputStream os = (optimize) ? getOutputStream(writer) : null; - if (os != null) { - if (DEBUG_ENABLED) { - log.debug("Invoking marshalByElement. " + - "Marshaling to an OutputStream. " + - "Object is " - + getDebugName(b)); - } - writer.flush(); - m.marshal(b, os); - } else { - if (DEBUG_ENABLED) { - log.debug("Invoking marshalByElement. " + - "Marshaling to an XMLStreamWriter. " + - "Object is " - + getDebugName(b)); - } - m.marshal(b, writer); - } - } catch (Exception e) { - throw ExceptionFactory.makeWebServiceException(e); - } - return null; - }}); - } - - /** - * Preferred way to unmarshal objects - * - * @param u Unmarshaller - * @param reader XMLStreamReader - * @return Object that represents an element - * @throws WebServiceException - */ - private static Object unmarshalByElement(final Unmarshaller u, final XMLStreamReader reader) - throws WebServiceException { - try { - if (DEBUG_ENABLED) { - log.debug("Invoking unMarshalByElement"); - } - return AccessController.doPrivileged(new PrivilegedAction() { - public Object run() { - try { - return u.unmarshal(reader); - } catch (Exception e) { - throw ExceptionFactory.makeWebServiceException(e); - } - } - }); - - } catch (Exception e) { - throw ExceptionFactory.makeWebServiceException(e); - } - } - - /** - * Marshal objects by type - * - * @param b Object that can be rendered as an element, but the element name is not known to the - * schema (i.e. rpc) - * @param m Marshaller - * @param writer XMLStreamWriter - * @param type - */ - private static void marshalByType(final Object b, final Marshaller m, - final XMLStreamWriter writer, final Class type, - final boolean isList, final JAXBUtils.CONSTRUCTION_TYPE ctype) - throws WebServiceException { - AccessController.doPrivileged(new PrivilegedAction() { - public Object run() { - try { - - // NOTE - // Example: - // <xsd:simpleType name="LongList"> - // <xsd:list> - // <xsd:simpleType> - // <xsd:restriction base="xsd:unsignedInt"/> - // </xsd:simpleType> - // </xsd:list> - // </xsd:simpleType> - // <element name="myLong" nillable="true" type="impl:LongList"/> - // - // LongList will be represented as an int[] - // On the wire myLong will be represented as a list of integers - // with intervening whitespace - // <myLong>1 2 3</myLong> - // - // Unfortunately, we are trying to marshal by type. Therefore - // we want to marshal an element (foo) that is unknown to schema. - // If we use the normal marshal code, the wire will look like - // this (which is incorrect): - // <foo><item>1</item><item>2</item><item>3</item></foo> - // - // The solution is to detect this situation and marshal the - // String instead. Then we get the correct wire format: - // <foo>1 2 3</foo> - Object jbo = b; - - if (isList || (type != null && type.isArray())) { - if (DEBUG_ENABLED) { - log.debug("marshalling type which is a List or Array"); - } - // We conver to xsdListString only if the type is not known - // to the context. In case a jaxbcontext is created from package - // the array types or list are not know to the context. - if (ctype == JAXBUtils.CONSTRUCTION_TYPE.BY_CONTEXT_PATH) { - QName qName = XMLRootElementUtil.getXmlRootElementQNameFromObject(b); - String text = XSDListUtils.toXSDListString(getTypeEnabledObject(b)); - jbo = new JAXBElement(qName, String.class, text); - } else if (ctype == JAXBUtils.CONSTRUCTION_TYPE.BY_CLASS_ARRAY) { - // do nothing common array types should be know to the jaxbcontext. - // so do not use xsdListString conversion. - } - } - - // When JAXBContext is created using a context path, it will not include Enum - // classes. - // These classes have @XmlEnum annotation but not @XmlType/@XmlElement, so the - // user will see MarshallingEx, class not known to ctxt. - // - // This is a jax-b defect, for now this fix is in place to pass CTS. This only - // fixes the - // situation where the enum is the top-level object (e.g., message-part in - // rpc-lit scenario) - // - // Sample of what enum looks like: - // @XmlEnum public enum EnumString { - // @XmlEnumValue("String1") STRING_1("String1"), - // @XmlEnumValue("String2") STRING_2("String2"); - // ... } - if (type.isEnum()) { - if (b != null) { - if (DEBUG_ENABLED) { - log.debug("marshalByType. Marshaling " + type.getName() - + " as Enum"); - } - JAXBElement jbe = (JAXBElement) b; - String value = XMLRootElementUtil.getEnumValue((Enum) jbe.getValue()); - - jbo = new JAXBElement(jbe.getName(), String.class, value); - } - } - - if (DEBUG_ENABLED) { - log.debug("Invoking marshalByType. " + - "Marshaling to an XMLStreamWriter. Object is " - + getDebugName(b)); - } - m.marshal(jbo, writer); - - } catch (Exception e) { - throw ExceptionFactory.makeWebServiceException(e); - } - return null; - } - }); - } - - /** - * The root element being read is defined by schema/JAXB; however its contents are known by - * schema/JAXB. Therefore we use unmarshal by the declared type (This method is used to - * unmarshal rpc elements) - * - * @param u Unmarshaller - * @param reader XMLStreamReader - * @param type Class - * @return Object - * @throws WebServiceException - */ - private static Object unmarshalByType(final Unmarshaller u, final XMLStreamReader reader, - final Class type, final boolean isList, - final JAXBUtils.CONSTRUCTION_TYPE ctype) - throws WebServiceException { - - if (DEBUG_ENABLED) { - log.debug("Invoking unmarshalByType."); - } - - return AccessController.doPrivileged(new PrivilegedAction() { - public Object run() { - try { - // Unfortunately RPC is type based. Thus a - // declared type must be used to unmarshal the xml. - Object jaxb; - - if (!isList) { - // case: We are not unmarshalling an xsd:list but an Array. - - if (type.isArray()) { - // If the context is created using package - // we will not have common arrays or type array in the context - // so let use a differet way to unmarshal this type - if (ctype == JAXBUtils.CONSTRUCTION_TYPE.BY_CONTEXT_PATH) { - jaxb = unmarshalAsListOrArray(reader, u, type); - } - // list on client array on server, Can happen only in start from java - // case. - else if ((ctype == JAXBUtils.CONSTRUCTION_TYPE.BY_CLASS_ARRAY)) { - // The type could be any Object or primitive - // I will first unmarshall the xmldata to a String[] - // Then use the unmarshalled jaxbElement to create - // proper type Object Array. - jaxb = u.unmarshal(reader, String[].class); - Object typeObj = getTypeEnabledObject(jaxb); - // Now convert String Array in to the required Type Array. - if (getTypeEnabledObject(typeObj) instanceof String[]) { - String[] strArray = (String[]) typeObj; - String strTokens = new String(); - for (String str : strArray) { - strTokens = strTokens + " " + str; - } - QName qName = - XMLRootElementUtil. - getXmlRootElementQNameFromObject(jaxb); - Object obj = XSDListUtils.fromXSDListString(strTokens, type); - jaxb = new JAXBElement(qName, type, obj); - } - } else { - jaxb = u.unmarshal(reader, type); - } - - } else if (type.isEnum()) { - // When JAXBContext is created using a context path, it will not - // include Enum classes. - // These classes have @XmlEnum annotation but not @XmlType/@XmlElement, - // so the user will see MarshallingEx, class not known to ctxt. - // - // This is a jax-b defect, for now this fix is in place to pass CTS. - // This only fixes the - // situation where the enum is the top-level object (e.g., message-part - // in rpc-lit scenario) - // - // Sample of what enum looks like: - // @XmlEnum public enum EnumString { - // @XmlEnumValue("String1") STRING_1("String1"), - // @XmlEnumValue("String2") STRING_2("String2"); - // - // public static getValue(String){} <-- resolves a "value" to an emum - // object - // ... } - if (DEBUG_ENABLED) { - log.debug("unmarshalByType. Unmarshalling " + type.getName() - + " as Enum"); - } - - JAXBElement<String> enumValue = u.unmarshal(reader, String.class); - - if (enumValue != null) { - Method m = - type.getMethod("fromValue", new Class[] { String.class }); - jaxb = m.invoke(null, new Object[] { enumValue.getValue() }); - } else { - jaxb = null; - } - } - //Normal case: We are not unmarshalling a xsd:list or Array - else { - jaxb = u.unmarshal(reader, type); - } - - } else { - // If this is an xsd:list, we need to return the appropriate - // list or array (see NOTE above) - // First unmarshal as a String - //Second convert the String into a list or array - jaxb = unmarshalAsListOrArray(reader, u, type); - } - return jaxb; - } catch (Exception e) { - throw ExceptionFactory.makeWebServiceException(e); - } - } - }); - } - - /** - * convert the String into a list or array - * @param <T> - * @param jaxb - * @param type - * @return - * @throws IllegalAccessException - * @throws ParseException - * @throws NoSuchMethodException - * @throws InstantiationException - * @throws DatatypeConfigurationException - * @throws InvocationTargetException - */ - private static Object unmarshalAsListOrArray(XMLStreamReader reader, Unmarshaller u, - Class type) - throws IllegalAccessException, ParseException,NoSuchMethodException,InstantiationException, - DatatypeConfigurationException,InvocationTargetException,JAXBException { - //If this is an xsd:list, we need to return the appropriate - // list or array (see NOTE above) - // First unmarshal as a String - Object jaxb = u.unmarshal(reader, String.class); - //Second convert the String into a list or array - if (getTypeEnabledObject(jaxb) instanceof String) { - QName qName = XMLRootElementUtil.getXmlRootElementQNameFromObject(jaxb); - Object obj = XSDListUtils.fromXSDListString((String) getTypeEnabledObject(jaxb), type); - return new JAXBElement(qName, type, obj); - } else { - return jaxb; - } - - } - - public boolean isElementData() { return true; } @@ -625,6 +189,15 @@ public boolean isDestructiveWrite() { return false; } + + public OMDataSourceExt copy() throws OMException { + + if (DEBUG_ENABLED) { + log.debug("Making a copy of the JAXB object"); + } + return new JAXBDataSource(this.getObject(), + (JAXBDSContext) this.getBusinessContext()); + } public byte[] getXMLBytes(String encoding) throws UnsupportedEncodingException { try { @@ -636,38 +209,13 @@ } } - /** - * Return type enabled object - * - * @param obj type or element enabled object - * @return type enabled object - */ - static Object getTypeEnabledObject(Object obj) { - if (obj == null) { - return null; - } - if (obj instanceof JAXBElement) { - return ((JAXBElement) obj).getValue(); + public void setParent(Message message) { + if (busContext != null) { + ((JAXBBlockContext) busContext).setMessage(message); } - return obj; + super.setParent(message); } - private static String getDebugName(Object o) { - return (o == null) ? "null" : o.getClass().getCanonicalName(); - } + - /** - * If the writer is backed by an OutputStream, then return the OutputStream - * @param writer - * @return OutputStream or null - */ - private static OutputStream getOutputStream(XMLStreamWriter writer) throws XMLStreamException { - if (writer.getClass() == MTOMXMLStreamWriter.class) { - return ((MTOMXMLStreamWriter) writer).getOutputStream(); - } - if (writer.getClass() == XMLStreamWriterWithOS.class) { - return ((XMLStreamWriterWithOS) writer).getOutputStream(); - } - return null; - } }
Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/databinding/impl/XMLStringBlockImpl.java URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/databinding/impl/XMLStringBlockImpl.java?rev=603038&r1=603037&r2=603038&view=diff ============================================================================== --- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/databinding/impl/XMLStringBlockImpl.java (original) +++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/databinding/impl/XMLStringBlockImpl.java Mon Dec 10 12:34:39 2007 @@ -18,8 +18,11 @@ */ package org.apache.axis2.jaxws.message.databinding.impl; +import org.apache.axiom.om.OMDataSourceExt; import org.apache.axiom.om.OMElement; +import org.apache.axiom.om.OMException; import org.apache.axiom.om.util.StAXUtils; +import org.apache.axis2.datasource.XMLStringDataSource; import org.apache.axis2.jaxws.ExceptionFactory; import org.apache.axis2.jaxws.message.databinding.XMLStringBlock; import org.apache.axis2.jaxws.message.factory.BlockFactory; @@ -66,7 +69,6 @@ super(omElement, null, qName, factory); } - @Override protected Object _getBOFromReader(XMLStreamReader reader, Object busContext) throws XMLStreamException { // Create a Reader2Writer converter and get the output as a String @@ -74,7 +76,6 @@ return r2w.getAsString(); } - @Override protected XMLStreamReader _getReaderFromBO(Object busObj, Object busContext) throws XMLStreamException { // Create an XMLStreamReader from the inputFactory using the String as the sources @@ -83,7 +84,6 @@ return StAXUtils.createXMLStreamReader(sr); } - @Override protected void _outputFromBO(Object busObject, Object busContext, XMLStreamWriter writer) throws XMLStreamException { // There is no fast way to output the String to a writer, so get the reader @@ -124,6 +124,10 @@ public boolean isDestructiveWrite() { return false; + } + + public OMDataSourceExt copy() throws OMException { + return new XMLStringDataSource((String) getObject()); } Modified: webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/message/MessagePersistanceTests.java URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/message/MessagePersistanceTests.java?rev=603038&r1=603037&r2=603038&view=diff ============================================================================== --- webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/message/MessagePersistanceTests.java (original) +++ webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/message/MessagePersistanceTests.java Mon Dec 10 12:34:39 2007 @@ -24,6 +24,7 @@ import org.apache.axiom.soap.SOAPBody; import org.apache.axiom.soap.SOAPEnvelope; import org.apache.axis2.Constants.Configuration; +import org.apache.axis2.datasource.jaxb.JAXBDataSource; import org.apache.axis2.jaxws.core.MessageContext; import org.apache.axis2.jaxws.message.databinding.JAXBBlockContext; import org.apache.axis2.jaxws.message.databinding.impl.JAXBBlockImpl; @@ -291,7 +292,7 @@ omse = (OMSourcedElement) child; assertTrue(!omse.isExpanded()); ds = omse.getDataSource(); - assertTrue(ds instanceof ByteArrayDataSource); + assertTrue(ds instanceof JAXBDataSource); // Simulate transport baos = new ByteArrayOutputStream(); @@ -547,7 +548,7 @@ omse = (OMSourcedElement) child; assertTrue(!omse.isExpanded()); ds = omse.getDataSource(); - assertTrue(ds instanceof ByteArrayDataSource); + assertTrue(ds instanceof JAXBDataSource); // Simulate transport on the copied message baos = new ByteArrayOutputStream(); @@ -562,9 +563,9 @@ assertTrue(restoredText.contains("Body")); assertTrue(restoredText.indexOf("MIMEBoundary_Axis2Rocks") > 0); - // TODO Currently the attachments are inlined when the JAXBBlock is copied. - //assertTrue(restoredText.indexOf(sampleText) > 0); - //assertTrue(restoredText.indexOf("<soapenv:Body><sendImage xmlns=\"urn://mtom.test.org\"><input><imageData><xop:Include") > 0); + // Make sure that attachment is not inlined + assertTrue(restoredText.indexOf(sampleText) > 0); + assertTrue(restoredText.indexOf("<soapenv:Body><sendImage xmlns=\"urn://mtom.test.org\"><input><imageData><xop:Include") > 0); } Modified: webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/ExceptionFactory.java URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/ExceptionFactory.java?rev=603038&r1=603037&r2=603038&view=diff ============================================================================== --- webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/ExceptionFactory.java (original) +++ webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/ExceptionFactory.java Mon Dec 10 12:34:39 2007 @@ -19,6 +19,7 @@ package org.apache.axis2.jaxws; +import org.apache.axiom.om.OMException; import org.apache.axis2.AxisFault; import org.apache.axis2.jaxws.i18n.Messages; import org.apache.commons.logging.Log; @@ -257,6 +258,7 @@ while (t != null) { Throwable nextCause = null; if (t instanceof InvocationTargetException || + t instanceof OMException || t instanceof AxisFault) { // Skip over this cause nextCause = getCause(t); Modified: webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/i18n/resource.properties URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/i18n/resource.properties?rev=603038&r1=603037&r2=603038&view=diff ============================================================================== --- webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/i18n/resource.properties (original) +++ webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/i18n/resource.properties Mon Dec 10 12:34:39 2007 @@ -281,3 +281,4 @@ pDescrErr=Null Descriptor. PropertyDescriptor not found. pDescrErr2=No read Method found to read property Value from jaxbObject: {0} restWithSOAPErr=Expected an XML over HTTP message, but the message appears to be a SOAP message. The namespace is {0} +noDataHandler=A data handler was not found for content id {0} --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]