[jboss-svn-commits] JBL Code SVN: r22437 - labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/webservice.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Sep 5 09:07:41 EDT 2008


Author: kevin.conner at jboss.com
Date: 2008-09-05 09:07:41 -0400 (Fri, 05 Sep 2008)
New Revision: 22437

Modified:
   labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/webservice/BaseWebService.java
   labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/webservice/ESBServiceEndpointInfo.java
   labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/webservice/JAXWSProviderClassGenerator.java
Log:
Fix oneway behaviour: JBESB-1985

Modified: labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/webservice/BaseWebService.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/webservice/BaseWebService.java	2008-09-05 11:25:21 UTC (rev 22436)
+++ labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/webservice/BaseWebService.java	2008-09-05 13:07:41 UTC (rev 22437)
@@ -36,6 +36,8 @@
 import javax.xml.soap.SOAPFault;
 import javax.xml.soap.SOAPMessage;
 import javax.xml.transform.stream.StreamResult;
+import javax.xml.ws.Provider;
+import javax.xml.ws.WebServiceException;
 
 import org.apache.log4j.Logger;
 import org.jboss.soa.esb.client.ServiceInvoker;
@@ -60,7 +62,7 @@
  * This is the abstract base class for a SOAP messages
  * @author kevin
  */
-public abstract class BaseWebService
+public abstract class BaseWebService implements Provider<SOAPMessage>
 {
     private static final QName SERVER_FAULT_QN = new QName("http://schemas.xmlsoap.org/soap/envelope/", "Server") ;
     
@@ -78,17 +80,15 @@
         securityExtractor = new WSSecuritySoapExtractor();
     }
     
-    public Object invoke(final Object obj)
-        throws SOAPException
+    public SOAPMessage invoke(final SOAPMessage request)
     {
-        final SOAPMessage request = (SOAPMessage)obj;
         final Message esbReq = MessageFactory.getInstance().getMessage() ;
         try
         {
             final SOAPBody soapBody = request.getSOAPBody() ;
             if (soapBody == null)
             {
-                throw new SOAPException("Missing SOAP body from request") ;
+                throw new WebServiceException("Missing SOAP body from request") ;
             }
             // There is a bug in JBossWS extractContentAsDocument so we do this ourselves
             final Iterator children = soapBody.getChildElements() ;
@@ -136,55 +136,67 @@
             }
             else
             {
-                return null ;
+                // We should be able to return null here but this causes JBossWS to NPE.
+                return javax.xml.soap.MessageFactory.newInstance().createMessage();
             }
-         }
+        }
+        catch (final WebServiceException wse)
+        {
+            throw wse ;
+        }
         catch (final Exception ex)
         {
-            SOAPMessage faultMsg = null;
-            if (ex instanceof FaultMessageException)
+            try
             {
-                final FaultMessageException fme = (FaultMessageException) ex ;
-                final Message faultMessage = fme.getReturnedMessage() ;
-                if (faultMessage != null)
+                SOAPMessage faultMsg = null;
+                if (ex instanceof FaultMessageException)
                 {
-                    final Body body = faultMessage.getBody() ;
-                    final QName faultCode = (QName)body.get(Fault.DETAIL_CODE_CONTENT) ;
-                    final String faultDescription = (String)body.get(Fault.DETAIL_DESCRIPTION_CONTENT) ;
-                    final String faultDetail = (String)body.get(Fault.DETAIL_DETAIL_CONTENT) ;
-                    
-                    if (faultCode != null)
+                    final FaultMessageException fme = (FaultMessageException) ex ;
+                    final Message faultMessage = fme.getReturnedMessage() ;
+                    if (faultMessage != null)
                     {
-                        faultMsg = javax.xml.soap.MessageFactory.newInstance().createMessage() ;
-                        final SOAPFault fault = faultMsg.getSOAPBody().addFault(faultCode, faultDescription) ;
-                        if (faultDetail != null)
+                        final Body body = faultMessage.getBody() ;
+                        final QName faultCode = (QName)body.get(Fault.DETAIL_CODE_CONTENT) ;
+                        final String faultDescription = (String)body.get(Fault.DETAIL_DESCRIPTION_CONTENT) ;
+                        final String faultDetail = (String)body.get(Fault.DETAIL_DETAIL_CONTENT) ;
+                        
+                        if (faultCode != null)
                         {
-                            try
+                            faultMsg = javax.xml.soap.MessageFactory.newInstance().createMessage() ;
+                            final SOAPFault fault = faultMsg.getSOAPBody().addFault(faultCode, faultDescription) ;
+                            if (faultDetail != null)
                             {
-                                final Document detailDoc = YADOMUtil.parseStream(new ByteArrayInputStream(faultDetail.getBytes()),
-                                        false, false, true);
-                                final Detail detail = fault.addDetail() ;
-                                detail.appendChild(detailDoc.getDocumentElement()) ;
+                                try
+                                {
+                                    final Document detailDoc = YADOMUtil.parseStream(new ByteArrayInputStream(faultDetail.getBytes()),
+                                            false, false, true);
+                                    final Detail detail = fault.addDetail() ;
+                                    detail.appendChild(detailDoc.getDocumentElement()) ;
+                                }
+                                catch (final Exception ex2)
+                                {
+                                    LOGGER.warn("Failed to parse fault detail", ex2) ;
+                                }
                             }
-                            catch (final Exception ex2)
-                            {
-                                LOGGER.warn("Failed to parse fault detail", ex2) ;
-                            }
                         }
+                        else
+                        {
+                            final Throwable cause = fme.getCause() ;
+                            faultMsg = (cause != null) ? generateFault(cause) : generateFault(ex) ;
+                        }
                     }
-                    else
-                    {
-                        final Throwable cause = fme.getCause() ;
-                        faultMsg = (cause != null) ? generateFault(cause) : generateFault(ex) ;
-                    }
                 }
+                
+                if (faultMsg == null)
+                {
+                    faultMsg = generateFault(ex) ;
+                }
+                return faultMsg ;
             }
-            
-            if (faultMsg == null)
+            catch (final SOAPException soape)
             {
-                faultMsg = generateFault(ex) ;
+                throw new WebServiceException("Unexpected exception generating fault response", soape) ;
             }
-            return faultMsg ;
         }
     }
     

Modified: labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/webservice/ESBServiceEndpointInfo.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/webservice/ESBServiceEndpointInfo.java	2008-09-05 11:25:21 UTC (rev 22436)
+++ labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/webservice/ESBServiceEndpointInfo.java	2008-09-05 13:07:41 UTC (rev 22437)
@@ -71,16 +71,23 @@
 		final Actions actions = service.getActions() ;
 		if (actions != null)
 		{
-			isOneWay = MepType.ONE_WAY.equals(actions.getMep()) ;
+			isOneWay = (actions.getOutXsd() == null) ;
+			if (isOneWay)
+			{
+				if (actions.getFaultXsd() != null)
+				{
+					LOGGER.warn("Fault schemas ignored for OneWay service " + serviceCategory + ":" + serviceName) ;
+				}
+				if (MepType.REQUEST_RESPONSE.equals(actions.getMep()))
+				{
+					LOGGER.warn("No response specified for RequestResponse service " + serviceCategory + ":" + serviceName) ;
+				}
+			}
 		}
 		else
 		{
 			isOneWay = false ;
 		}
-		if (isOneWay && (actions.getFaultXsd() != null))
-		{
-			LOGGER.warn("Fault schemas ignored for OneWay service " + serviceCategory + ":" + serviceName) ;
-		}
 	}
 
 	public String getRequestName() {

Modified: labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/webservice/JAXWSProviderClassGenerator.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/webservice/JAXWSProviderClassGenerator.java	2008-09-05 11:25:21 UTC (rev 22436)
+++ labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/webservice/JAXWSProviderClassGenerator.java	2008-09-05 13:07:41 UTC (rev 22437)
@@ -26,7 +26,6 @@
 import javassist.NotFoundException;
 import javassist.bytecode.AnnotationsAttribute;
 import javassist.bytecode.ConstPool;
-import javassist.bytecode.SignatureAttribute;
 import javassist.bytecode.annotation.Annotation;
 import javassist.bytecode.annotation.EnumMemberValue;
 import javassist.bytecode.annotation.StringMemberValue;
@@ -71,9 +70,6 @@
 			{
 				seiClass.setSuperclass(requestResponseSuperClass) ;
 			}
-			
-			CtClass providerClass = pool.get("javax.xml.ws.Provider");
-			seiClass.setInterfaces(new CtClass[] { providerClass });
 
 			ConstPool constantPool = seiClass.getClassFile().getConstPool();
 			AnnotationsAttribute attribute = new AnnotationsAttribute(
@@ -120,12 +116,6 @@
 			defaultConstructor.setBody(constructorStr) ;
 			seiClass.addConstructor(defaultConstructor) ;
 			
-			// add generics for class
-			SignatureAttribute signatureAttribute = new SignatureAttribute(
-					seiClass.getClassFile().getConstPool(),
-					"Ljava/lang/Object;Ljavax/xml/ws/Provider<Ljavax/xml/soap/SOAPMessage;>;");
-			seiClass.getClassFile().addAttribute(signatureAttribute);
-			
 			return seiClass.toBytecode();
 		} catch (Exception e) {
 




More information about the jboss-svn-commits mailing list