[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