[jboss-svn-commits] JBL Code SVN: r21104 - in labs/jbossesb/workspace/jimma/product: samples/quickstarts/publish_as_webservice and 6 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Jul 18 02:59:46 EDT 2008


Author: jim.ma
Date: 2008-07-18 02:59:46 -0400 (Fri, 18 Jul 2008)
New Revision: 21104

Added:
   labs/jbossesb/workspace/jimma/product/services/soapui-client/src/lib/soap-xmlbeans-1.2.jar
Modified:
   labs/jbossesb/workspace/jimma/product/rosetta/src/org/jboss/internal/soa/esb/webservice/Constants.java
   labs/jbossesb/workspace/jimma/product/rosetta/src/org/jboss/internal/soa/esb/webservice/OneWayBaseWebService.java
   labs/jbossesb/workspace/jimma/product/rosetta/src/org/jboss/internal/soa/esb/webservice/RequestResponseBaseWebService.java
   labs/jbossesb/workspace/jimma/product/samples/quickstarts/publish_as_webservice/build.xml
   labs/jbossesb/workspace/jimma/product/samples/quickstarts/publish_as_webservice/jboss-esb.xml
   labs/jbossesb/workspace/jimma/product/samples/quickstarts/publish_as_webservice/readme.txt
   labs/jbossesb/workspace/jimma/product/samples/quickstarts/publish_as_webservice/src/org/jboss/soa/esb/samples/quickstart/helloworld/MyJMSListenerAction.java
   labs/jbossesb/workspace/jimma/product/samples/quickstarts/publish_as_webservice/src/org/jboss/soa/esb/samples/quickstart/helloworld/test/SOAPTest.java
   labs/jbossesb/workspace/jimma/product/samples/quickstarts/publish_as_webservice/src/org/jboss/soa/esb/samples/quickstart/helloworld/test/SendEsbMessage.java
   labs/jbossesb/workspace/jimma/product/services/soap/src/main/java/org/jboss/soa/esb/actions/soap/SOAPIn.java
   labs/jbossesb/workspace/jimma/product/services/soap/src/main/java/org/jboss/soa/esb/actions/soap/SoapUIInvoker.java
   labs/jbossesb/workspace/jimma/product/services/soapui-client/src/main/java/org/jboss/soa/esb/services/soapui/SoapUIClientService.java
   labs/jbossesb/workspace/jimma/product/services/soapui-client/src/main/java/org/jboss/soa/esb/services/soapui/SoapUIClientServiceMBean.java
   labs/jbossesb/workspace/jimma/product/services/soapui-client/src/test/java/org/jboss/soa/esb/services/soapui/SoapUIClientServiceMBeanUnitTest.java
Log:
* Add exceptionProcessMethod to handle soap fault message
* Update sample to show how to throw an exception that can be processed to a soap fault message


Modified: labs/jbossesb/workspace/jimma/product/rosetta/src/org/jboss/internal/soa/esb/webservice/Constants.java
===================================================================
--- labs/jbossesb/workspace/jimma/product/rosetta/src/org/jboss/internal/soa/esb/webservice/Constants.java	2008-07-18 06:45:34 UTC (rev 21103)
+++ labs/jbossesb/workspace/jimma/product/rosetta/src/org/jboss/internal/soa/esb/webservice/Constants.java	2008-07-18 06:59:46 UTC (rev 21104)
@@ -21,5 +21,6 @@
 
 public final class Constants {
 	public static final String SOAP_IN_LOC = "SoapIn"; 
-	public static final String SOAP_OUT_LOC = "SoapOut"; 
+	public static final String SOAP_OUT_LOC = "SoapOut";
+	public static final String SOAP_FAULT_LOC = "SoapOut";
 }

Modified: labs/jbossesb/workspace/jimma/product/rosetta/src/org/jboss/internal/soa/esb/webservice/OneWayBaseWebService.java
===================================================================
--- labs/jbossesb/workspace/jimma/product/rosetta/src/org/jboss/internal/soa/esb/webservice/OneWayBaseWebService.java	2008-07-18 06:45:34 UTC (rev 21103)
+++ labs/jbossesb/workspace/jimma/product/rosetta/src/org/jboss/internal/soa/esb/webservice/OneWayBaseWebService.java	2008-07-18 06:59:46 UTC (rev 21104)
@@ -23,11 +23,9 @@
 
 import java.io.ByteArrayOutputStream;
 
-import javax.annotation.Resource;
 import javax.xml.namespace.QName;
 import javax.xml.soap.SOAPException;
 import javax.xml.soap.SOAPMessage;
-import javax.xml.ws.WebServiceContext;
 
 import org.jboss.soa.esb.client.ServiceInvoker;
 import org.jboss.soa.esb.couriers.FaultMessageException;

Modified: labs/jbossesb/workspace/jimma/product/rosetta/src/org/jboss/internal/soa/esb/webservice/RequestResponseBaseWebService.java
===================================================================
--- labs/jbossesb/workspace/jimma/product/rosetta/src/org/jboss/internal/soa/esb/webservice/RequestResponseBaseWebService.java	2008-07-18 06:45:34 UTC (rev 21103)
+++ labs/jbossesb/workspace/jimma/product/rosetta/src/org/jboss/internal/soa/esb/webservice/RequestResponseBaseWebService.java	2008-07-18 06:59:46 UTC (rev 21104)
@@ -28,12 +28,15 @@
 import javax.xml.soap.SOAPException;
 import javax.xml.soap.SOAPMessage;
 
+import org.apache.log4j.Logger;
 import org.jboss.soa.esb.client.ServiceInvoker;
 import org.jboss.soa.esb.couriers.FaultMessageException;
 import org.jboss.soa.esb.listeners.message.MessageDeliverException;
 import org.jboss.soa.esb.message.Message;
 import org.jboss.soa.esb.message.format.MessageFactory;
+import org.jboss.soa.esb.message.format.MessageType;
 
+
 /**
  * This is the base class for a RequestResponse SOAP message
  * @author kevin
@@ -42,6 +45,7 @@
 {
     private static final QName SERVER_FAULT_QN = new QName("http://schemas.xmlsoap.org/soap/envelope/", "Server") ;
     private final ServiceInvoker serviceInvoker ;
+    private Logger logger = Logger.getLogger(this.getClass());
     
     protected RequestResponseBaseWebService(final String category, final String name)
         throws MessageDeliverException
@@ -54,27 +58,37 @@
     {
         final SOAPMessage request = (SOAPMessage)obj;
         final SOAPMessage response;
+        Message esbReq = MessageFactory.getInstance().getMessage(MessageType.JBOSS_XML) ;
+        Message esbRes = null;
         try
-        {
-            final Message msg = MessageFactory.getInstance().getMessage() ;
+        {        	
             final ByteArrayOutputStream byteStream = new ByteArrayOutputStream() ;
             request.writeTo(byteStream);
-            msg.getBody().add(Constants.SOAP_IN_LOC, byteStream.toString()) ;
-            byteStream.close() ;
-            Message esbRes = serviceInvoker.deliverSync(msg, (long)30000) ; 
+            esbReq.getBody().add(Constants.SOAP_IN_LOC, byteStream.toString()) ;
+            byteStream.close();
+            esbRes = serviceInvoker.deliverSync(esbReq, 30000); 
             String soapRes = (String)esbRes.getBody().get(Constants.SOAP_OUT_LOC);
             ByteArrayInputStream bin = new java.io.ByteArrayInputStream(soapRes.getBytes());
             response = javax.xml.soap.MessageFactory.newInstance().createMessage(null, bin);
          }
         catch (final Exception ex)
-        {
-              SOAPMessage faultMsg = javax.xml.soap.MessageFactory.newInstance().createMessage() ;
+        {             
+        	  SOAPMessage faultMsg = null;
               if (ex instanceof FaultMessageException)
               {
-                  //cast to user defined soap fault message
+            	  String soapFault = ex.getMessage();
+            	  ByteArrayInputStream bin = new java.io.ByteArrayInputStream(soapFault.getBytes());
+            	  try {
+					faultMsg = javax.xml.soap.MessageFactory.newInstance().createMessage(null, bin);
+				  } catch (Exception e) {
+					  logger.error("Failed to transform the ESB message fault to soap fault", e);
+					  faultMsg = javax.xml.soap.MessageFactory.newInstance().createMessage() ;
+	                  faultMsg.getSOAPBody().addFault(SERVER_FAULT_QN, ex.getMessage());
+				  }
               }
               else
               {
+            	  faultMsg = javax.xml.soap.MessageFactory.newInstance().createMessage() ;
                   faultMsg.getSOAPBody().addFault(SERVER_FAULT_QN, ex.getMessage());
               }
               return faultMsg ;

Modified: labs/jbossesb/workspace/jimma/product/samples/quickstarts/publish_as_webservice/build.xml
===================================================================
--- labs/jbossesb/workspace/jimma/product/samples/quickstarts/publish_as_webservice/build.xml	2008-07-18 06:45:34 UTC (rev 21103)
+++ labs/jbossesb/workspace/jimma/product/samples/quickstarts/publish_as_webservice/build.xml	2008-07-18 06:59:46 UTC (rev 21104)
@@ -7,23 +7,37 @@
 	
 	<!-- Import the base Ant build script... -->
 	<import file="../conf/base-build.xml"/>
-	<target name="runtest" depends="compile" 
-		description="sends a soap message to published web service">
-		<echo>Send soap message to published web service</echo>
+	<target name="wstest" depends="compile"  description="sends soap message to published web service">
+		<echo>Send soap message to published web service and receive reponse</echo>
 		<java fork="yes" classname="org.jboss.soa.esb.samples.quickstart.helloworld.test.SOAPTest" failonerror="true">
-			<classpath refid="exec-classpath"/>
+		      <arg value="HelloWorld"/>	
+                      <classpath refid="exec-classpath"/>
 		</java>
+                <echo/>
+                <echo/>
+		<echo>Send soap message to published web service and receive soap fault message</echo>
+		<java fork="yes" classname="org.jboss.soa.esb.samples.quickstart.helloworld.test.SOAPTest" failonerror="true">
+		      <arg value="Error"/>	
+                      <classpath refid="exec-classpath"/>
+		</java>
 	</target> 
 	
-	<target name="sendesb" depends="compile"
-		description="Will send an esb Message">
-		<echo>Runs Test ESB Message Sender</echo>
+	<target name="esbtest" depends="compile" description="send esb Message to esb service">
+		<echo>Send esb message to esb service and get response</echo>
 		<java fork="yes" classname="org.jboss.soa.esb.samples.quickstart.helloworld.test.SendEsbMessage" failonerror="true">
 			<arg value="ESBServiceSample"/> <!--  service category -->
 			<arg value="HelloWorldPubService"/>  <!--  service name -->
-			<arg value="Hello World - Straight to ESB listener - no Gateway"/> <!--  Message text -->
+			<arg value="HelloWorld"/> <!--  Message text -->
 			<classpath refid="exec-classpath"/>
 		</java>
+		<echo>Send esb message to esb service and get error</echo>
+		<java fork="yes" classname="org.jboss.soa.esb.samples.quickstart.helloworld.test.SendEsbMessage" failonerror="true">
+			<arg value="ESBServiceSample"/> <!--  service category -->
+			<arg value="HelloWorldPubService"/>  <!--  service name -->
+			<arg value="Error"/> <!--  Message text -->
+			<classpath refid="exec-classpath"/>
+		</java>
+
 	</target>
     
     <target name="copy-metainf">

Modified: labs/jbossesb/workspace/jimma/product/samples/quickstarts/publish_as_webservice/jboss-esb.xml
===================================================================
--- labs/jbossesb/workspace/jimma/product/samples/quickstarts/publish_as_webservice/jboss-esb.xml	2008-07-18 06:45:34 UTC (rev 21103)
+++ labs/jbossesb/workspace/jimma/product/samples/quickstarts/publish_as_webservice/jboss-esb.xml	2008-07-18 06:59:46 UTC (rev 21104)
@@ -7,6 +7,7 @@
                   <jms-message-filter
                       dest-type="QUEUE"
                       dest-name="queue/quickstart_helloworld_pub_service_Request_esb"
+                      selector="serviceName='HelloWorldPubService'"
                   />
               </jms-bus>
 
@@ -25,12 +26,13 @@
                 />
             </listeners>
             <actions  inXsd="/request.xsd" outXsd="/response.xsd" faultXsd="/fault.xsd">
-                   <action name="action1" class="org.jboss.soa.esb.actions.soap.SOAPIn"/>                   
-
-                    <action name="action2" 
+                   <action name="action1" class="org.jboss.soa.esb.actions.soap.SOAPIn">
+                       <property name="exceptionMethod" value="catchesException"/>
+                   </action>                   
+                   <action name="action2" 
                    	class="org.jboss.soa.esb.samples.quickstart.helloworld.MyJMSListenerAction" 
                    	process="displayMessage" 
-                   	/>      
+                   	/>  
                    <action name="action3" class="org.jboss.soa.esb.actions.soap.SOAPOut"/>
             </actions>
         </service>

Modified: labs/jbossesb/workspace/jimma/product/samples/quickstarts/publish_as_webservice/readme.txt
===================================================================
--- labs/jbossesb/workspace/jimma/product/samples/quickstarts/publish_as_webservice/readme.txt	2008-07-18 06:45:34 UTC (rev 21103)
+++ labs/jbossesb/workspace/jimma/product/samples/quickstarts/publish_as_webservice/readme.txt	2008-07-18 06:59:46 UTC (rev 21104)
@@ -13,17 +13,17 @@
   1. In a command terminal window in the quickstart folder type
      'ant deploy'.
   2. Open another command terminal window in this folder ("Window1"), type
-     'ant runtest'. It will send soap request to published web service for 
+     'ant wstest'. It will send soap request to published web service for 
       this esb service and disply the output.
   3. Open another command terminal window in this folder ("Window2"), type
-     'ant sendesb'. This task will send esb message to esb service and disply
+     'ant esbtest'. This task will send esb message to esb service and disply
       the output. 
 
 To Run '.esb' archive mode:
 ===========================
   1. In a command terminal window in this folder ("Window1"), type 'ant deploy'.
   2. Open another command terminal window in this folder ("Window2"), type
-     'ant runtest'.
+     'ant wstest'.
   3. Open another command terminal window in this folder ("Window2"), type
-     'ant sendesb'.
+     'ant esbtest'.
   4. In this folder ("Window1"), type 'ant undeploy'.

Modified: labs/jbossesb/workspace/jimma/product/samples/quickstarts/publish_as_webservice/src/org/jboss/soa/esb/samples/quickstart/helloworld/MyJMSListenerAction.java
===================================================================
--- labs/jbossesb/workspace/jimma/product/samples/quickstarts/publish_as_webservice/src/org/jboss/soa/esb/samples/quickstart/helloworld/MyJMSListenerAction.java	2008-07-18 06:45:34 UTC (rev 21103)
+++ labs/jbossesb/workspace/jimma/product/samples/quickstarts/publish_as_webservice/src/org/jboss/soa/esb/samples/quickstart/helloworld/MyJMSListenerAction.java	2008-07-18 06:59:46 UTC (rev 21104)
@@ -20,9 +20,15 @@
  */
 package org.jboss.soa.esb.samples.quickstart.helloworld;
 
+import java.util.Map;
+import java.util.HashMap;
+
 import org.jboss.soa.esb.actions.AbstractActionLifecycle;
 import org.jboss.soa.esb.helpers.ConfigTree;
 import org.jboss.soa.esb.message.Message;
+import org.jboss.soa.esb.actions.ActionProcessingFaultException;
+import org.jboss.soa.esb.message.format.MessageFactory;
+import org.jboss.internal.soa.esb.webservice.Constants;
 
 public class MyJMSListenerAction extends AbstractActionLifecycle
 {    
@@ -30,12 +36,25 @@
   public MyJMSListenerAction(ConfigTree config) { _config = config; }   
   public Message displayMessage(Message message) throws Exception
   { 
-      java.util.Map paras = (java.util.Map)message.getBody().get();
+      Map paras = (Map)message.getBody().get();
       String request = (String)paras.get("sayHi.arg0");
+      if (request.equals("Error")) {
+         Fault fault = new Fault("myErrorCode", "myDescription");
+         Message faultMessage = MessageFactory.getInstance().getMessage(message.getType());
+         faultMessage.getFault().setCause(new HelloWorldPubServiceFault1("hello world fault",fault));
+         faultMessage.getFault().setReason("my hello world fault");
+         //add this when expose specific exception to soap fault
+         Map faultMap = new HashMap();
+         faultMap.put("Fault.detail.sayFault.code", "myErrorCode");
+         faultMap.put("Fault.detail.sayFault.faultString", "myDescription");
+         faultMessage.getBody().add(Constants.SOAP_FAULT_LOC,faultMap);        
+         throw new ActionProcessingFaultException(faultMessage, "My Exception");        
+      }
+      
       String responseMsg = "Response from ESB Service : " + request;
       java.util.Map responsePara = new java.util.HashMap();
       responsePara.put("sayHiResponse.arg0", responseMsg);
       message.getBody().add(responsePara);
       return message;         		
-  }	
+  }
 }

Modified: labs/jbossesb/workspace/jimma/product/samples/quickstarts/publish_as_webservice/src/org/jboss/soa/esb/samples/quickstart/helloworld/test/SOAPTest.java
===================================================================
--- labs/jbossesb/workspace/jimma/product/samples/quickstarts/publish_as_webservice/src/org/jboss/soa/esb/samples/quickstart/helloworld/test/SOAPTest.java	2008-07-18 06:45:34 UTC (rev 21103)
+++ labs/jbossesb/workspace/jimma/product/samples/quickstarts/publish_as_webservice/src/org/jboss/soa/esb/samples/quickstart/helloworld/test/SOAPTest.java	2008-07-18 06:59:46 UTC (rev 21104)
@@ -30,7 +30,7 @@
 	public static void main(String args[]) {
  
 		String request = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:say=\"http://www.jboss.org/sayHi\">"
-                                + "<soapenv:Header/> <soapenv:Body> <say:sayHi> <say:arg0>hello world</say:arg0></say:sayHi>"
+                                + "<soapenv:Header/> <soapenv:Body> <say:sayHi> <say:arg0>" + args[0] + "</say:arg0></say:sayHi>"
                                 + "</soapenv:Body> </soapenv:Envelope>";
 		HttpClient client = new HttpClient();
 		PostMethod postMethod = new PostMethod(
@@ -49,7 +49,7 @@
 			// TODO Auto-generated catch block
 			e.printStackTrace();
 		}
-		
+		System.exit(0);
 
 	}
 

Modified: labs/jbossesb/workspace/jimma/product/samples/quickstarts/publish_as_webservice/src/org/jboss/soa/esb/samples/quickstart/helloworld/test/SendEsbMessage.java
===================================================================
--- labs/jbossesb/workspace/jimma/product/samples/quickstarts/publish_as_webservice/src/org/jboss/soa/esb/samples/quickstart/helloworld/test/SendEsbMessage.java	2008-07-18 06:45:34 UTC (rev 21103)
+++ labs/jbossesb/workspace/jimma/product/samples/quickstarts/publish_as_webservice/src/org/jboss/soa/esb/samples/quickstart/helloworld/test/SendEsbMessage.java	2008-07-18 06:59:46 UTC (rev 21104)
@@ -60,14 +60,15 @@
         
         ServiceInvoker invoker = new ServiceInvoker(args[0], args[1]);
     	
-        Message response = invoker.deliverSync(esbMessage, (long)3000);
-        
-        Map resParas = (Map)response.getBody().get();
-        
-        System.out.println("#######Response from ESB Service#########");
-
-        System.out.println(resParas.get("sayHiResponse.arg0"));
-    	
+        Message response = null;
+        try {
+            response= invoker.deliverSync(esbMessage, 3000);
+            Map resParas = (Map)response.getBody().get();
+            System.out.println(resParas.get("sayHiResponse.arg0"));
+        }catch(Exception ex) {
+           ex.getCause().printStackTrace();
+        } 
+        System.exit(0);   	
     }
     
 }

Modified: labs/jbossesb/workspace/jimma/product/services/soap/src/main/java/org/jboss/soa/esb/actions/soap/SOAPIn.java
===================================================================
--- labs/jbossesb/workspace/jimma/product/services/soap/src/main/java/org/jboss/soa/esb/actions/soap/SOAPIn.java	2008-07-18 06:45:34 UTC (rev 21103)
+++ labs/jbossesb/workspace/jimma/product/services/soap/src/main/java/org/jboss/soa/esb/actions/soap/SOAPIn.java	2008-07-18 06:59:46 UTC (rev 21104)
@@ -21,10 +21,14 @@
  */
 package org.jboss.soa.esb.actions.soap;
 
+import java.util.HashMap;
+import java.util.Map;
+
 import org.apache.log4j.Logger;
 import org.jboss.internal.soa.esb.webservice.Constants;
 import org.jboss.soa.esb.ConfigurationException;
 import org.jboss.soa.esb.actions.ActionProcessingException;
+import org.jboss.soa.esb.actions.ActionProcessingFaultException;
 import org.jboss.soa.esb.helpers.ConfigTree;
 import org.jboss.soa.esb.message.Message;
 
@@ -35,14 +39,45 @@
 	}
 
 	public Message process(final Message message)
-			throws ActionProcessingException {		
+			throws ActionProcessingException {
 		if (message.getBody().get(Constants.SOAP_IN_LOC) == null) {
 			return message;
 		}
-		String soapRequest = (String) message.getBody().get(Constants.SOAP_IN_LOC);
+
+		String soapRequest = (String) message.getBody().get(
+				Constants.SOAP_IN_LOC);
 		Object requestObj = populateResponseOgnlMap(soapRequest);
-	    message.getBody().add(requestObj);
+		message.getBody().add(requestObj);
 		return message;
 	}
 
+	public void catchesException(Message message, Throwable exception) {
+		 if (message.getBody().get(Constants.SOAP_IN_LOC) == null) {
+			 return;
+		 }
+		 if (exception instanceof ActionProcessingFaultException) {
+	        ActionProcessingFaultException ex = (ActionProcessingFaultException) exception;
+	        //if there is no fault detail, no need to process
+	        if (ex.getFaultMessage().getFault().getCause() == null) {
+	        	return;
+	        }
+			String faultName = ex.getFaultMessage().getFault().getCause().getClass().getSimpleName();
+			Map faultMap = new HashMap();
+			if (ex.getFaultMessage().getBody().get(Constants.SOAP_FAULT_LOC) != null) {
+				faultMap = (Map)ex.getFaultMessage().getBody().get(Constants.SOAP_FAULT_LOC);
+			}
+			//add exception.getMessage soap message
+			faultMap.put("Fault.faultstring", 
+					ex.getFaultMessage().getFault().getCause().getMessage());
+			String fault = null;
+			try {
+				fault = soapUIInvoker.buildFault(wsdl, operation, faultName,
+						faultMap, httpClientProps, smooksTransform, soapNs);
+			} catch (Exception e) {
+				logger.error("Failed to compose soap fault message from exception", e);
+			}
+
+			ex.getFaultMessage().getFault().setReason(fault);
+		}
+	}
 }

Modified: labs/jbossesb/workspace/jimma/product/services/soap/src/main/java/org/jboss/soa/esb/actions/soap/SoapUIInvoker.java
===================================================================
--- labs/jbossesb/workspace/jimma/product/services/soap/src/main/java/org/jboss/soa/esb/actions/soap/SoapUIInvoker.java	2008-07-18 06:45:34 UTC (rev 21103)
+++ labs/jbossesb/workspace/jimma/product/services/soap/src/main/java/org/jboss/soa/esb/actions/soap/SoapUIInvoker.java	2008-07-18 06:59:46 UTC (rev 21104)
@@ -35,6 +35,7 @@
 public class SoapUIInvoker {
 
     private static final String[] buildRequestSig = new String[] {String.class.getName(), String.class.getName(), Map.class.getName(), Properties.class.getName(), String.class.getName(), String.class.getName()};
+    private static final String[] buildFaultSig = new String[] {String.class.getName(), String.class.getName(), String.class.getName(), Map.class.getName(), Properties.class.getName(), String.class.getName(), String.class.getName()};
     private static final String[] getEndpointSig = new String[] {String.class.getName(), Properties.class.getName()};
     private MBeanServer mbeanServer;
     private ObjectName serviceName;
@@ -114,7 +115,20 @@
     }
     
     
-
+    
+    public String buildFault(String wsdl, String operation, String faultName, Map params, Properties httpClientProps, String smooksResource, String soapNs) throws IOException, UnsupportedOperationException, SAXException {
+        try {
+            return (String) mbeanServer.invoke(serviceName, "buildFault", new Object[] {wsdl, operation, faultName, params, httpClientProps, smooksResource, soapNs}, buildFaultSig);
+        } catch (InstanceNotFoundException e) {
+            throw new UnsupportedOperationException("SOAP UI Client Service not found under name '" + serviceName.getCanonicalName() + "'.  This service must be deployed before this action can be used.", e);
+        } catch (MBeanException e) {
+            rethrowException(e);
+        } catch (ReflectionException e) {
+            rethrowException(e);
+        } 
+        throw new RuntimeException("Unexpected code exit point reached!");
+    }
+    
     /**
      * Get the 1st endpoint from the specified WSDL.
      *

Added: labs/jbossesb/workspace/jimma/product/services/soapui-client/src/lib/soap-xmlbeans-1.2.jar
===================================================================
(Binary files differ)


Property changes on: labs/jbossesb/workspace/jimma/product/services/soapui-client/src/lib/soap-xmlbeans-1.2.jar
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Modified: labs/jbossesb/workspace/jimma/product/services/soapui-client/src/main/java/org/jboss/soa/esb/services/soapui/SoapUIClientService.java
===================================================================
--- labs/jbossesb/workspace/jimma/product/services/soapui-client/src/main/java/org/jboss/soa/esb/services/soapui/SoapUIClientService.java	2008-07-18 06:45:34 UTC (rev 21103)
+++ labs/jbossesb/workspace/jimma/product/services/soapui-client/src/main/java/org/jboss/soa/esb/services/soapui/SoapUIClientService.java	2008-07-18 06:59:46 UTC (rev 21104)
@@ -22,40 +22,53 @@
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.StringReader;
-import java.util.*;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
 
+import javax.wsdl.Part;
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.dom.DOMResult;
 import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.dom.DOMResult;
 import javax.xml.transform.stream.StreamResult;
 
+import org.apache.commons.httpclient.HttpClient;
 import org.apache.log4j.Logger;
-import org.apache.commons.httpclient.HttpClient;
+import org.apache.xmlbeans.XmlCursor;
+import org.apache.xmlbeans.XmlObject;
+import org.apache.xmlbeans.XmlOptions;
 import org.jboss.internal.soa.esb.soap.OGNLUtils;
+import org.jboss.internal.soa.esb.util.ESBProperties;
 import org.jboss.internal.soa.esb.util.LRUCache;
-import org.jboss.internal.soa.esb.util.ESBProperties;
+import org.jboss.soa.esb.ConfigurationException;
 import org.jboss.soa.esb.dom.YADOMUtil;
 import org.jboss.soa.esb.http.HttpClientFactory;
-import org.jboss.soa.esb.ConfigurationException;
 import org.jboss.system.ServiceMBeanSupport;
-import org.milyn.xml.XmlUtil;
 import org.milyn.Smooks;
 import org.milyn.resource.URIResourceLocator;
-import org.w3c.dom.*;
+import org.milyn.xml.XmlUtil;
+import org.w3c.dom.Comment;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
-import org.xml.sax.InputSource;
 
 import com.eviware.soapui.impl.wsdl.WsdlInterface;
 import com.eviware.soapui.impl.wsdl.WsdlOperation;
 import com.eviware.soapui.impl.wsdl.WsdlProject;
-import com.eviware.soapui.impl.wsdl.mock.WsdlMockOperation;
-import com.eviware.soapui.impl.wsdl.mock.WsdlMockResponse;
-import com.eviware.soapui.impl.wsdl.mock.WsdlMockService;
+import com.eviware.soapui.impl.wsdl.support.soap.SoapMessageBuilder;
 import com.eviware.soapui.impl.wsdl.support.wsdl.WsdlLoader;
+import com.eviware.soapui.impl.wsdl.support.xsd.SampleXmlUtil;
+import com.eviware.soapui.model.iface.MessagePart;
 import com.eviware.soapui.model.iface.Operation;
-import com.eviware.soapui.model.mock.MockService;
+import com.eviware.soapui.settings.WsdlSettings;
 
 
 /**
@@ -131,6 +144,42 @@
         String responseTemplate = wsdlOperation.createResponse(true);
         return buildSOAPMessage(responseTemplate, params, smooksResource, soapNs);   	
     }
+    
+    
+    public String buildFault(String wsdl, String operation, String faultName, Map params, Properties httpClientProps, String smooksResource, String soapNs) throws IOException, UnsupportedOperationException, SAXException {
+    	String faultDetail = null;
+    	Operation operationInst = getOperation(wsdl, operation, httpClientProps);
+        WsdlOperation wsdlOperation = (WsdlOperation)operationInst;
+        MessagePart[] faultParts = wsdlOperation.getFaultParts();
+        params.put("Fault.faultcode","soapenv:server");
+	    SoapMessageBuilder soapMessageBuilder = wsdlOperation.getInterface().getMessageBuilder();
+	    String faultTemplate = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\">"
+	                            + "<soapenv:Body><soapenv:Fault><faultcode>?</faultcode><faultstring>?</faultstring><detail>";
+		XmlObject detail = XmlObject.Factory.newInstance();
+        for (int i = 0 ; i < faultParts.length; i++) {
+        	MessagePart.FaultPart faultPart = (MessagePart.FaultPart)faultParts[i];
+        	if (faultPart.getName().equalsIgnoreCase(faultName)) {
+        		SampleXmlUtil generator = new SampleXmlUtil( false );
+        		generator.setExampleContent( false );
+        		generator.setTypeComment( false );
+        		XmlCursor cursor = detail.newCursor();   			
+    			cursor.toFirstContentToken();
+    			generator.setTypeComment( true );
+    			generator.setIgnoreOptional(wsdlOperation.getInterface().getSettings().getBoolean( WsdlSettings.XML_GENERATION_ALWAYS_INCLUDE_OPTIONAL_ELEMENTS ) );
+    			for( Part part : faultPart.getWsdlParts() ) {
+    				try {
+						soapMessageBuilder.createElementForPart(part, cursor, generator);
+					} catch (Exception e) {
+						logger.error("Unable to create soap fualt template", e);
+					}
+        		}
+        	}
+        }
+        faultTemplate = faultTemplate + detail.xmlText( new XmlOptions().setSaveAggressiveNamespaces().setSavePrettyPrint())
+                        + "</detail></soapenv:Fault></soapenv:Body></soapenv:Envelope>";
+        faultDetail = buildSOAPMessage(faultTemplate, params, smooksResource, soapNs);        
+        return faultDetail;         	
+    }
 
 
     /**

Modified: labs/jbossesb/workspace/jimma/product/services/soapui-client/src/main/java/org/jboss/soa/esb/services/soapui/SoapUIClientServiceMBean.java
===================================================================
--- labs/jbossesb/workspace/jimma/product/services/soapui-client/src/main/java/org/jboss/soa/esb/services/soapui/SoapUIClientServiceMBean.java	2008-07-18 06:45:34 UTC (rev 21103)
+++ labs/jbossesb/workspace/jimma/product/services/soapui-client/src/main/java/org/jboss/soa/esb/services/soapui/SoapUIClientServiceMBean.java	2008-07-18 06:59:46 UTC (rev 21104)
@@ -71,6 +71,9 @@
      */
     public abstract String buildResponse(String wsdl, String operation, Map params, Properties httpClientProps, String smooksResource, String soapNs) throws IOException, UnsupportedOperationException, SAXException;
 
+    
+    public abstract String buildFault(String wsdl, String operation, String faultName, Map params, Properties httpClientProps, String smooksResource, String soapNs) throws IOException, UnsupportedOperationException, SAXException;
+    
     /**
      * Get the 1st endpoint from the specified WSDL.
      *

Modified: labs/jbossesb/workspace/jimma/product/services/soapui-client/src/test/java/org/jboss/soa/esb/services/soapui/SoapUIClientServiceMBeanUnitTest.java
===================================================================
--- labs/jbossesb/workspace/jimma/product/services/soapui-client/src/test/java/org/jboss/soa/esb/services/soapui/SoapUIClientServiceMBeanUnitTest.java	2008-07-18 06:45:34 UTC (rev 21103)
+++ labs/jbossesb/workspace/jimma/product/services/soapui-client/src/test/java/org/jboss/soa/esb/services/soapui/SoapUIClientServiceMBeanUnitTest.java	2008-07-18 06:59:46 UTC (rev 21104)
@@ -318,10 +318,19 @@
     	SoapUIClientService mbean = new SoapUIClientService();
     	Map<Object, Object> paras = new HashMap<Object, Object>();
     	paras.put("sayHiReponse.arg0", "response");
-    	String str = mbean.buildReponse(wsdlFile.toURL().toString(), "HelloWorldPubServiceOp", paras, properties, null, null);
+    	String str = mbean.buildResponse(wsdlFile.toURL().toString(), "HelloWorldPubServiceOp", paras, properties, null, null);
     	assertTrue("Failed to generate correct soap response", str.indexOf("<say:arg0>response</say:arg0>") > -1);
     }
     
+    public void test_BuildFault() throws Exception {    
+    	File wsdlFile = new File(WSDL_LOCATAION + "/helloworld.wsdl");
+    	properties.setProperty(HttpClientFactory.TARGET_HOST_URL, wsdlFile.toURI().toString());
+    	SoapUIClientService mbean = new SoapUIClientService();
+    	Map<Object, Object> paras = new HashMap<Object, Object>();
+    	paras.put("Fault.detail.sayFault.code", "test");
+    	String str = mbean.buildFault(wsdlFile.toURL().toString(), "HelloWorldPubServiceOp", "HelloWorldPubServiceFault1", paras, properties, null, null);
+    	assertTrue("Failed to generate correct soap fault message", str.indexOf("<say:code>test</say:code>") > -1);
+    }
     
     private void addOrderItems(List<OrderItem> items) {
         items.add(new OrderItem(1, "item1", 1, new BigDecimal(1.00), 1));
@@ -400,9 +409,5 @@
         final InputStream outputIS = SoapUIClientServiceMBeanUnitTest.class.getResourceAsStream("output.xml") ;
         
         System.out.println("compare returns: " + compareCharStreams(expectedIS, outputIS));
-    }
-    
-    
-    
-    
+    }    
 }




More information about the jboss-svn-commits mailing list