You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by ng...@apache.org on 2007/06/28 21:00:27 UTC
svn commit: r551659 - in
/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws:
handler/HandlerChainProcessor.java handler/LogicalMessageImpl.java
message/util/impl/SAAJConverterImpl.java
Author: ngallardo
Date: Thu Jun 28 12:00:26 2007
New Revision: 551659
URL: http://svn.apache.org/viewvc?view=rev&rev=551659
Log:
LogicalMessage.getPayload() for faults causes ClassCastException
Modified:
webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/handler/HandlerChainProcessor.java
webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/handler/LogicalMessageImpl.java
webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/util/impl/SAAJConverterImpl.java
Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/handler/HandlerChainProcessor.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/handler/HandlerChainProcessor.java?view=diff&rev=551659&r1=551658&r2=551659
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/handler/HandlerChainProcessor.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/handler/HandlerChainProcessor.java Thu Jun 28 12:00:26 2007
@@ -515,12 +515,14 @@
// need to check if message is already a fault message or not,
// probably by way of a flag (isFault) in the MessageContext or Message
+ if (log.isDebugEnabled()) {
+ log.debug("Creating a fault Message object for the exception: " + e.getClass().getName());
+ }
+
try {
-
/* TODO TODO TODO
- * There has GOT to be a better way to do this.
- */
-
+ * There has GOT to be a better way to do this.
+ */
if (protocol == Protocol.soap11 || protocol == Protocol.soap12) {
String protocolNS = (protocol == Protocol.soap11) ?
SOAPConstants.URI_NS_SOAP_1_1_ENVELOPE :
Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/handler/LogicalMessageImpl.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/handler/LogicalMessageImpl.java?view=diff&rev=551659&r1=551658&r2=551659
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/handler/LogicalMessageImpl.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/handler/LogicalMessageImpl.java Thu Jun 28 12:00:26 2007
@@ -57,11 +57,14 @@
import org.apache.axis2.jaxws.message.factory.MessageFactory;
import org.apache.axis2.jaxws.message.factory.SourceBlockFactory;
import org.apache.axis2.jaxws.registry.FactoryRegistry;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.w3c.dom.Document;
import org.xml.sax.SAXException;
public class LogicalMessageImpl implements LogicalMessage {
+ private static final Log log = LogFactory.getLog(LogicalMessageImpl.class);
private MEPContext mepCtx;
@@ -84,6 +87,10 @@
* @see javax.xml.ws.LogicalMessage#getPayload(javax.xml.bind.JAXBContext)
*/
public Object getPayload(JAXBContext context) {
+ if (log.isDebugEnabled()) {
+ log.debug("Retreiving the message payload as a Source object");
+ }
+
BlockFactory factory = (JAXBBlockFactory) FactoryRegistry.getFactory(JAXBBlockFactory.class);
JAXBBlockContext jbc = new JAXBBlockContext(context);
Object payload = _getPayload(jbc, factory);
@@ -94,16 +101,30 @@
Object payload = null;
try {
Block block = mepCtx.getMessageObject().getBodyBlock(context, factory);
- Object content = block.getBusinessObject(true);
-
- // For now, we have to create a new Block from the original content
- // and set that back on the message. The Block is not currently
- // able to create a copy of itself just yet.
- Payloads payloads = createPayloads(content);
-
- _setPayload(payloads.CACHE_PAYLOAD, context, factory);
-
- payload = payloads.HANDLER_PAYLOAD;
+ if (block != null) {
+ if (log.isDebugEnabled()) {
+ log.debug("A message payload was found.");
+ }
+ Object content = block.getBusinessObject(true);
+
+ // For now, we have to create a new Block from the original content
+ // and set that back on the message. The Block is not currently
+ // able to create a copy of itself just yet.
+ Payloads payloads = createPayloads(content);
+ _setPayload(payloads.CACHE_PAYLOAD, context, factory);
+
+ payload = payloads.HANDLER_PAYLOAD;
+ }
+ else {
+ // If the block was null, then let's return an empty
+ // Source object rather than a null.
+ if (log.isDebugEnabled()) {
+ log.debug("There was no payload to be found. Returning an empty Source object");
+ }
+ byte[] bytes = new byte[0];
+ payload = new StreamSource(new ByteArrayInputStream(bytes));
+ }
+
} catch (XMLStreamException e) {
throw ExceptionFactory.makeWebServiceException(e);
}
@@ -138,6 +159,10 @@
mepCtx.getMessageObject().setBodyBlock(block);
}
else {
+ if (log.isDebugEnabled()) {
+ log.debug("The payload contains a fault");
+ }
+
mepCtx.getMessageObject().setBodyBlock(block);
// If the payload is a fault, then we can't set it back on the message
@@ -151,6 +176,9 @@
XMLStreamReader stream = StAXUtils.createXMLStreamReader(sr);
Message msg = mf.createFrom(stream, mepCtx.getMessageObject().getProtocol());
+ // This is required for proper serialization of the OM structure.
+ msg.getAsOMElement().build();
+
mepCtx.setMessage(msg);
} catch (Exception e) {
throw ExceptionFactory.makeWebServiceException(e);
Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/util/impl/SAAJConverterImpl.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/util/impl/SAAJConverterImpl.java?view=diff&rev=551659&r1=551658&r2=551659
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/util/impl/SAAJConverterImpl.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/util/impl/SAAJConverterImpl.java Thu Jun 28 12:00:26 2007
@@ -118,7 +118,11 @@
*/
public org.apache.axiom.soap.SOAPEnvelope toOM(SOAPEnvelope saajEnvelope)
throws WebServiceException {
- // Before we do the conversion, we have to fix the QNames for fault elements
+ if (log.isDebugEnabled()) {
+ log.debug("Converting SAAJ SOAPEnvelope to an OM SOAPEnvelope");
+ }
+
+ // Before we do the conversion, we have to fix the QNames for fault elements
_fixFaultElements(saajEnvelope);
// Get a XMLStreamReader backed by a SOAPElement tree
XMLStreamReader reader = new SOAPElementReader(saajEnvelope);
@@ -175,6 +179,10 @@
* @see org.apache.axis2.jaxws.message.util.SAAJConverter#toOM(javax.xml.soap.SOAPElement)
*/
public OMElement toOM(SOAPElement soapElement) throws WebServiceException {
+ if (log.isDebugEnabled()) {
+ log.debug("Converting SAAJ SOAPElement to an OMElement");
+ }
+
// Get a XMLStreamReader backed by a SOAPElement tree
XMLStreamReader reader = new SOAPElementReader(soapElement);
// Get a OM Builder.
@@ -196,7 +204,11 @@
* @see org.apache.axis2.jaxws.message.util.SAAJConverter#toSAAJ(org.apache.axiom.om.OMElement, javax.xml.soap.SOAPElement)
*/
public SOAPElement toSAAJ(OMElement omElement, SOAPElement parent) throws WebServiceException {
- XMLStreamReader reader = null;
+ if (log.isDebugEnabled()) {
+ log.debug("Converting OMElement to an SAAJ SOAPElement");
+ }
+
+ XMLStreamReader reader = null;
// If the OM element is not attached to a parser (builder), then the OM
// is built and you cannot ask for XMLStreamReaderWithoutCaching.
@@ -225,7 +237,11 @@
*/
public SOAPElement toSAAJ(OMElement omElement, SOAPElement parent, SOAPFactory sf)
throws WebServiceException {
- XMLStreamReader reader = null;
+ if (log.isDebugEnabled()) {
+ log.debug("Converting OMElement to an SAAJ SOAPElement");
+ }
+
+ XMLStreamReader reader = null;
// If the OM element is not attached to a parser (builder), then the OM
// is built and you cannot ask for XMLStreamReaderWithoutCaching.
@@ -510,14 +526,27 @@
}
SOAPBody body = env.getBody();
- if (body != null && body.hasFault()) {
- SOAPFault fault = body.getFault();
+ if (body != null && !body.hasFault()) {
+ if (log.isDebugEnabled()) {
+ log.debug("No fault found. No conversion necessary.");
+ }
+ return;
+ }
+ else if (body != null && body.hasFault()) {
+ if (log.isDebugEnabled()) {
+ log.debug("A fault was found. Converting the fault child elements to SOAP 1.1 format");
+ }
+
+ SOAPFault fault = body.getFault();
Iterator itr = fault.getChildElements();
while (itr.hasNext()) {
SOAPElement se = (SOAPElement) itr.next();
if (se.getLocalName().equals(SOAP12Constants.SOAP_FAULT_CODE_LOCAL_NAME)) {
- // Axis2 SAAJ stores the acutal faultcode text under a SOAPFaultValue object, so we have to
+ if (log.isDebugEnabled()) {
+ log.debug("Converting: faultcode");
+ }
+ // Axis2 SAAJ stores the acutal faultcode text under a SOAPFaultValue object, so we have to
// get that and add it as a text node under the original element.
Node value = se.getFirstChild();
if (value != null && value instanceof org.apache.axis2.saaj.SOAPElementImpl) {
@@ -532,9 +561,15 @@
}
}
else if (se.getLocalName().equals(SOAP12Constants.SOAP_FAULT_DETAIL_LOCAL_NAME)) {
+ if (log.isDebugEnabled()) {
+ log.debug("Converting: detail");
+ }
se.setElementQName(new QName(se.getNamespaceURI(), SOAP11Constants.SOAP_FAULT_DETAIL_LOCAL_NAME));
}
else if (se.getLocalName().equals(SOAP12Constants.SOAP_FAULT_REASON_LOCAL_NAME)) {
+ if (log.isDebugEnabled()) {
+ log.debug("Converting: faultstring");
+ }
se.setElementQName(new QName(se.getNamespaceURI(), SOAP11Constants.SOAP_FAULT_STRING_LOCAL_NAME));
// Axis2 SAAJ stores the acutal faultstring text under a SOAPFaultValue object, so we have to
// get that and add it as a text node under the original element.
@@ -553,6 +588,9 @@
}
}
} catch (SOAPException e) {
+ if (log.isDebugEnabled()) {
+ log.debug("An error occured while converting fault elements: " + e.getMessage());
+ }
throw ExceptionFactory.makeWebServiceException(e);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org