Author: heiko.braun(a)jboss.com
Date: 2009-11-05 14:01:14 -0500 (Thu, 05 Nov 2009)
New Revision: 234
Added:
branches/hbraun/runtime/engine/src/main/java/org/jboss/soa/bpel/runtime/ws/MessageContext.java
Modified:
branches/hbraun/runtime/engine/src/main/java/org/jboss/soa/bpel/runtime/engine/BPELEngine.java
branches/hbraun/runtime/engine/src/main/java/org/jboss/soa/bpel/runtime/engine/ode/BPELEngineImpl.java
branches/hbraun/runtime/engine/src/main/java/org/jboss/soa/bpel/runtime/ws/AbstractWebServiceEndpoint.java
branches/hbraun/runtime/engine/src/main/java/org/jboss/soa/bpel/runtime/ws/EndpointManager.java
branches/hbraun/runtime/engine/src/main/java/org/jboss/soa/bpel/runtime/ws/SOAPMessageAdapter.java
branches/hbraun/runtime/engine/src/main/java/org/jboss/soa/bpel/runtime/ws/WebServiceProviderFactory.java
branches/hbraun/samples/quickstart/loan_approval/war/src/com/example/loan_approval/wsdl/RiskAssessmentPTImpl.java
Log:
Rework WS integration, faults and header parsing
Modified:
branches/hbraun/runtime/engine/src/main/java/org/jboss/soa/bpel/runtime/engine/BPELEngine.java
===================================================================
---
branches/hbraun/runtime/engine/src/main/java/org/jboss/soa/bpel/runtime/engine/BPELEngine.java 2009-11-05
18:57:38 UTC (rev 233)
+++
branches/hbraun/runtime/engine/src/main/java/org/jboss/soa/bpel/runtime/engine/BPELEngine.java 2009-11-05
19:01:14 UTC (rev 234)
@@ -17,6 +17,9 @@
*/
package org.jboss.soa.bpel.runtime.engine;
+import org.apache.ode.bpel.iapi.Message;
+import org.w3c.dom.Element;
+
/**
* This interface represents a BPEL engine.
*
@@ -47,7 +50,7 @@
* @throws BPELFault Process raised a fault
* @throws Exception Failed to invoke the operation
*/
- public org.w3c.dom.Element invoke(String operation, javax.xml.namespace.QName service,
+ public Element invoke(String operation, javax.xml.namespace.QName service,
org.w3c.dom.Element message) throws BPELFault, Exception;
/**
Modified:
branches/hbraun/runtime/engine/src/main/java/org/jboss/soa/bpel/runtime/engine/ode/BPELEngineImpl.java
===================================================================
---
branches/hbraun/runtime/engine/src/main/java/org/jboss/soa/bpel/runtime/engine/ode/BPELEngineImpl.java 2009-11-05
18:57:38 UTC (rev 233)
+++
branches/hbraun/runtime/engine/src/main/java/org/jboss/soa/bpel/runtime/engine/ode/BPELEngineImpl.java 2009-11-05
19:01:14 UTC (rev 234)
@@ -17,63 +17,40 @@
*/
package org.jboss.soa.bpel.runtime.engine.ode;
-import java.util.StringTokenizer;
-
-import java.util.concurrent.Future;
-import java.util.concurrent.TimeUnit;
-
-import org.jboss.soa.bpel.runtime.engine.BPELFault;
-
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ThreadFactory;
-
-import org.apache.ode.bpel.engine.cron.CronScheduler;
-import org.apache.ode.bpel.memdao.BpelDAOConnectionFactoryImpl;
-
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.ode.bpel.common.evt.DebugBpelEventListener;
import org.apache.ode.bpel.dao.BpelDAOConnectionFactory;
+import org.apache.ode.bpel.engine.BpelManagementFacadeImpl;
import org.apache.ode.bpel.engine.BpelServerImpl;
import org.apache.ode.bpel.engine.CountLRUDehydrationPolicy;
-import org.apache.ode.bpel.engine.BpelManagementFacadeImpl;
-import org.apache.ode.bpel.common.evt.DebugBpelEventListener;
-//import org.apache.ode.bpel.extension.ExtensionBundleRuntime;
-//import org.apache.ode.bpel.extension.ExtensionBundleValidation;
-//import org.apache.ode.bpel.extension.ExtensionValidator;
+import org.apache.ode.bpel.engine.cron.CronScheduler;
import org.apache.ode.bpel.extvar.jdbc.JdbcExternalVariableModule;
-import org.apache.ode.bpel.iapi.BpelEventListener;
-import org.apache.ode.bpel.iapi.EndpointReferenceContext;
-import org.apache.ode.bpel.iapi.Message;
-import org.apache.ode.bpel.iapi.MyRoleMessageExchange;
-import org.apache.ode.bpel.iapi.ProcessConf;
-import org.apache.ode.bpel.iapi.ProcessStoreEvent;
-import org.apache.ode.bpel.iapi.ProcessStoreListener;
-import org.apache.ode.bpel.iapi.Scheduler;
+import org.apache.ode.bpel.iapi.*;
import org.apache.ode.bpel.intercept.MessageExchangeInterceptor;
+import org.apache.ode.bpel.memdao.BpelDAOConnectionFactoryImpl;
import org.apache.ode.il.config.OdeConfigProperties;
import org.apache.ode.il.dbutil.Database;
import org.apache.ode.scheduler.simple.JdbcDelegate;
import org.apache.ode.scheduler.simple.SimpleScheduler;
-import org.apache.ode.store.RiftSawProcessStore;
import org.apache.ode.store.ProcessStoreImpl;
+import org.apache.ode.store.RiftSawProcessStore;
import org.apache.ode.utils.DOMUtils;
import org.apache.ode.utils.GUID;
import org.apache.ode.utils.Properties;
import org.jboss.soa.bpel.runtime.engine.BPELEngine;
+import org.jboss.soa.bpel.runtime.engine.BPELFault;
import org.jboss.soa.bpel.runtime.engine.IntegrationLayer;
+import org.jboss.soa.bpel.runtime.ws.AbstractWebServiceEndpoint;
+import org.w3c.dom.Element;
import javax.sql.DataSource;
-import javax.transaction.HeuristicMixedException;
-import javax.transaction.HeuristicRollbackException;
-import javax.transaction.InvalidTransactionException;
-import javax.transaction.NotSupportedException;
-import javax.transaction.RollbackException;
-import javax.transaction.Synchronization;
-import javax.transaction.SystemException;
-import javax.transaction.Transaction;
-import javax.transaction.TransactionManager;
+import javax.transaction.*;
import javax.transaction.xa.XAResource;
+import javax.xml.namespace.QName;
+import javax.xml.soap.SOAPEnvelope;
+import java.util.StringTokenizer;
+import java.util.concurrent.*;
/**
* This is the JBoss Service wrapping the ODE BPEL engine.
@@ -122,11 +99,11 @@
* required.
* @throws Exception Failed to invoke the operation
*/
- public org.w3c.dom.Element invoke(String operation, javax.xml.namespace.QName service,
- org.w3c.dom.Element message) throws BPELFault,
Exception {
- org.w3c.dom.Element ret=null;
+ public Element invoke(String operation, QName service, Element message)
+ throws BPELFault, Exception
+ {
+ Element ret = null;
-
boolean success = true;
MyRoleMessageExchange odeMex = null;
Future responseFuture = null;
@@ -136,17 +113,26 @@
// Creating message exchange
String messageId = new GUID().toString();
- odeMex = _bpelServer.getEngine().createMessageExchange(messageId, service,
- operation);
+ odeMex = _bpelServer.getEngine().createMessageExchange(messageId, service,
operation);
__log.debug("ODE routed to operation " + odeMex.getOperation() + "
from service " + service);
+
//odeMex.setProperty("isTwoWay",
Boolean.toString(msgContext.getAxisOperation() instanceof TwoChannelAxisOperation));
if (odeMex.getOperation() != null) {
// Preparing message to send to ODE
Message odeRequest =
odeMex.createMessage(odeMex.getOperation().getInput().getMessage().getQName());
//_converter.parseSoapRequest(odeRequest, msgContext.getEnvelope(),
odeMex.getOperation());
- odeRequest.setMessage(message);
-
+ // distinguish WS and ESB invocation
+ if(message instanceof SOAPEnvelope)
+ {
+ // TODO: Use SOAPMessageAdapter here
+
odeRequest.setMessage(AbstractWebServiceEndpoint.getMessagePayload((SOAPEnvelope)message));
+ }
+ else
+ {
+ odeRequest.setMessage(message);
+ }
+
// TODO: Might need to store session id/epr of caller?
//readHeader(msgContext, odeMex);
@@ -253,8 +239,8 @@
return(ret);
}
- private org.w3c.dom.Element onResponse(MyRoleMessageExchange mex) throws BPELFault,
Exception {
- org.w3c.dom.Element ret=null;
+ private Element onResponse(MyRoleMessageExchange mex) throws BPELFault, Exception {
+ Element ret=null;
switch (mex.getStatus()) {
case FAULT:
@@ -263,8 +249,8 @@
throw new BPELFault(mex.getFault(), mex.getFaultResponse().getMessage());
case ASYNC:
- case RESPONSE:
- ret = mex.getResponse().getMessage();
+ case RESPONSE:
+ ret = mex.getResponse().getMessage();
if (__log.isDebugEnabled())
__log.debug("Response message " + ret);
break;
Modified:
branches/hbraun/runtime/engine/src/main/java/org/jboss/soa/bpel/runtime/ws/AbstractWebServiceEndpoint.java
===================================================================
---
branches/hbraun/runtime/engine/src/main/java/org/jboss/soa/bpel/runtime/ws/AbstractWebServiceEndpoint.java 2009-11-05
18:57:38 UTC (rev 233)
+++
branches/hbraun/runtime/engine/src/main/java/org/jboss/soa/bpel/runtime/ws/AbstractWebServiceEndpoint.java 2009-11-05
19:01:14 UTC (rev 234)
@@ -33,6 +33,9 @@
import javax.naming.InitialContext;
import javax.naming.NamingException;
+import javax.wsdl.Definition;
+import javax.wsdl.factory.WSDLFactory;
+import javax.wsdl.xml.WSDLReader;
import javax.xml.namespace.QName;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
@@ -42,7 +45,7 @@
/**
* Base class for BPEL endpoints that are created through javassist.
* Represents a JAX-WS {@link javax.xml.ws.Provider} implementation.
- *
+ *
* @see org.jboss.soa.bpel.runtime.ws.WebServiceProviderFactory
*
* @author Heiko.Braun <heiko.braun(a)jboss.com>
@@ -51,67 +54,113 @@
{
protected final Log log = LogFactory.getLog(getClass());
+ private Definition wsdlDefinition;
+ private SOAPMessageAdapter soapMessageAdapter;
+
+ private boolean isInit;
+
+ /* private void init()
+ {
+ if(!isInit)
+ {
+ try
+ {
+ WSDLReader wsdlReader = WSDLFactory.newInstance().newWSDLReader();
+ log.debug("Creating WebServiceEndpoint from " + getWsdlLocation());
+ this.wsdlDefinition = wsdlReader.readWSDL( getWsdlLocation() );
+ this.soapMessageAdapter = new SOAPMessageAdapter(
+ wsdlDefinition,
+ QName.valueOf(getServiceName()),
+ getPortName()
+ );
+ }
+ catch(Exception e)
+ {
+ throw new IllegalArgumentException("Failed to parse " +
getWsdlLocation());
+ }
+
+ isInit = true;
+ }
+ } */
+
public SOAPMessage invoke(SOAPMessage request)
{
log.debug("Invoking endpoint "+getEndpointId());
-
+
try
{
- SOAPBody body = request.getSOAPBody();
- Element messageElement = null; // first child of type Element
- NodeList children = body.getChildNodes();
- for(int i=0; i<children.getLength(); i++)
- {
- Node tmp = children.item(i);
- if(Node.ELEMENT_NODE == tmp.getNodeType())
- {
- messageElement = (Element)tmp;
- break;
- }
+ SOAPPart soapPart = request.getSOAPPart();
+ SOAPEnvelope soapEnvelope = soapPart.getEnvelope();
+ Element messageElement = getMessagePayload(soapEnvelope);
- }
-
// make sure namespaces are preserved
- DOMUtils.pancakeNamespaces(messageElement);
+ DOMUtils.pancakeNamespaces(soapEnvelope);
// TODO:
https://jira.jboss.org/jira/browse/RIFTSAW-38
// For now create a deep copy (performance hit)
- DocumentBuilder builder =
DocumentBuilderFactory.newInstance().newDocumentBuilder();
- Document doc = builder.newDocument();
- Element clone = (Element)doc.importNode(messageElement, true);
+ /*DocumentBuilder builder =
DocumentBuilderFactory.newInstance().newDocumentBuilder();
+ Document doc = builder.newDocument();
+ Element clone = (Element)doc.importNode(messageElement, true); */
if(log.isDebugEnabled())
- log.debug( "ODE inbound message: \n" +DOMWriter.printNode(clone, true)
);
+ log.debug( "ODE inbound message: \n"
+DOMWriter.printNode(messageElement, true) );
- Element result = getEngine().invoke(
+ Element odeResponse = getEngine().invoke(
messageElement.getLocalName(),
QName.valueOf(getServiceName()),
- clone//(Element)messageElement
+ soapEnvelope
);
+ if(!(odeResponse instanceof SOAPEnvelope))
+ throw new IllegalArgumentException("Expected SOAPEnvelope, got
"+odeResponse.getClass());
+
if(log.isDebugEnabled())
- log.debug( "ODE outbound message: \n" +DOMWriter.printNode(result,
true) );
+ log.debug( "ODE outbound message: \n" +DOMWriter.printNode(odeResponse,
true) );
- SOAPMessage response = MessageFactory.newInstance().createMessage();
- SOAPBody responseBody = response.getSOAPBody();
+ SOAPMessage soapResponse = MessageFactory.newInstance().createMessage();
+ soapResponse.getSOAPPart().appendChild(odeResponse);
+
+ /* SOAPBody responseBody = soapResponse.getSOAPBody();
SOAPFactory soapFactory = SOAPFactory.newInstance();
- SOAPElement responseElement = soapFactory.createElement(result);
+ SOAPElement responseElement = soapFactory.createElement(odeResponse);
+ responseBody.appendChild(responseElement);*/
- responseBody.appendChild(responseElement);
-
- return response;
+ return soapResponse;
}
catch (Exception e)
{
throw new RuntimeException("Failed to invoke BPEL process", e);
}
+
}
+ public static Element getMessagePayload(SOAPEnvelope soapEnvelope)
+ throws SOAPException
+ {
+ SOAPBody body = soapEnvelope.getBody();
+ Element messageElement = null; // first child of type Element
+ NodeList children = body.getChildNodes();
+ for(int i=0; i<children.getLength(); i++)
+ {
+ Node tmp = children.item(i);
+ if(Node.ELEMENT_NODE == tmp.getNodeType())
+ {
+ messageElement = (Element)tmp;
+ break;
+ }
+ }
+ return messageElement;
+ }
+
public abstract String getEndpointId();
public abstract String getServiceName();
+ public abstract String getWsdlLocation();
+
+ public abstract String getPortName();
+
private BPELEngine getEngine()
{
try
Modified:
branches/hbraun/runtime/engine/src/main/java/org/jboss/soa/bpel/runtime/ws/EndpointManager.java
===================================================================
---
branches/hbraun/runtime/engine/src/main/java/org/jboss/soa/bpel/runtime/ws/EndpointManager.java 2009-11-05
18:57:38 UTC (rev 233)
+++
branches/hbraun/runtime/engine/src/main/java/org/jboss/soa/bpel/runtime/ws/EndpointManager.java 2009-11-05
19:01:14 UTC (rev 234)
@@ -93,7 +93,7 @@
metaData.getServiceName(),
metaData.getPortName(),
metaData.getEndpointId(),
- wsdlRef.getWsdlFileURL(),
+ wsdlRef,
classLoader
);
Added:
branches/hbraun/runtime/engine/src/main/java/org/jboss/soa/bpel/runtime/ws/MessageContext.java
===================================================================
---
branches/hbraun/runtime/engine/src/main/java/org/jboss/soa/bpel/runtime/ws/MessageContext.java
(rev 0)
+++
branches/hbraun/runtime/engine/src/main/java/org/jboss/soa/bpel/runtime/ws/MessageContext.java 2009-11-05
19:01:14 UTC (rev 234)
@@ -0,0 +1,74 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2006, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ */
+package org.jboss.soa.bpel.runtime.ws;
+
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+
+import javax.xml.soap.SOAPMessage;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author Heiko Braun <hbraun(a)redhat.com>
+ */
+public class MessageContext
+{
+ private static ThreadLocal<MessageContext> inbound;
+ private static ThreadLocal<MessageContext> outbound;
+
+ private SOAPMessage message;
+
+ protected MessageContext()
+ {
+ }
+
+ public void setMessage(SOAPMessage message)
+ {
+ this.message = message;
+ }
+
+ public SOAPMessage getMessage()
+ {
+ return message;
+ }
+
+ public static MessageContext getInbound()
+ {
+ if(inbound.get()==null)
+ inbound.set(new MessageContext());
+ return inbound.get();
+ }
+
+ public static MessageContext getOutbound()
+ {
+ if(outbound.get()==null)
+ outbound.set(new MessageContext());
+ return outbound.get();
+ }
+
+ public static void clearAll()
+ {
+ inbound.set(null);
+ outbound.set(null);
+ }
+}
Modified:
branches/hbraun/runtime/engine/src/main/java/org/jboss/soa/bpel/runtime/ws/SOAPMessageAdapter.java
===================================================================
---
branches/hbraun/runtime/engine/src/main/java/org/jboss/soa/bpel/runtime/ws/SOAPMessageAdapter.java 2009-11-05
18:57:38 UTC (rev 233)
+++
branches/hbraun/runtime/engine/src/main/java/org/jboss/soa/bpel/runtime/ws/SOAPMessageAdapter.java 2009-11-05
19:01:14 UTC (rev 234)
@@ -189,7 +189,7 @@
List<Part> parts = wsdlMessageDef.getOrderedParts(wsdlSoapBody.getParts());
for(Part part : parts)
- {
+ {
Element srcPartEl = DOMUtils.findChildByName(message, new QName(null,
part.getName()));
if (srcPartEl == null)
throw new RuntimeException("Part is missing" +part.getName());
@@ -239,6 +239,18 @@
extractSoapHeaderParts(odeMessage, soapMessage,
odeOperation.getOutput().getMessage());
}
+ public void parseSoapRequest(
+ org.apache.ode.bpel.iapi.Message odeMessage,
+ SOAPEnvelope envelope,
+ Operation op)
+ {
+ throw new RuntimeException("Not implemented");
+ }
+
+ public SOAPFault createSoapFault(Element message, QName faultName, Operation op) {
+ throw new RuntimeException("Not implemented");
+ }
+
private void extractSoapHeaderParts(Message odeMessage, SOAPMessage soapMessage,
javax.wsdl.Message wsdlMessageDef)
{
log.warn("extractSoapHeaderParts() not implemented");
@@ -268,7 +280,7 @@
throw new RuntimeException("Expected part wrapper
'"+rpcWrapQName+"'missing on
service:"+serviceName+"/"+portName);
for(Part part : parts)
- {
+ {
SOAPElement srcPart = getFirstChildWithName(new QName(null, part.getName()),
partWrapper);
if (srcPart == null)
throw new RuntimeException("Soap body does not contain required part
+"+part.getName());
Modified:
branches/hbraun/runtime/engine/src/main/java/org/jboss/soa/bpel/runtime/ws/WebServiceProviderFactory.java
===================================================================
---
branches/hbraun/runtime/engine/src/main/java/org/jboss/soa/bpel/runtime/ws/WebServiceProviderFactory.java 2009-11-05
18:57:38 UTC (rev 233)
+++
branches/hbraun/runtime/engine/src/main/java/org/jboss/soa/bpel/runtime/ws/WebServiceProviderFactory.java 2009-11-05
19:01:14 UTC (rev 234)
@@ -30,8 +30,6 @@
import javassist.bytecode.annotation.StringMemberValue;
import javax.xml.namespace.QName;
-import java.net.URL;
-import java.util.UUID;
/**
* Creates JAX-WS Provider classes using javassist.
@@ -45,7 +43,12 @@
{
private final static String PKG_PREFIX =
WebServiceProviderFactory.class.getPackage().getName()+".";
- public AbstractWebServiceEndpoint createProvider(QName service, String port, String
endpointId, URL wsdlLocation, ClassLoader loader)
+ public AbstractWebServiceEndpoint createProvider(
+ QName service, String port,
+ String endpointId,
+ WSDLReference wsdlRef,
+ ClassLoader loader
+ )
throws Exception
{
ClassPool pool = new ClassPool(true);
@@ -60,16 +63,26 @@
String implClassName = PKG_PREFIX+"BPELWebServiceEndpoint_"+endpointId;
CtClass impl = pool.makeClass(implClassName);
- // BPELWebServiceProvider.endpointId property
+ // AbstractWebServiceEndpoint.endpointId property
CtField idField = new CtField(stringType, "endpointId", impl);
idField.setModifiers(Modifier.PUBLIC);
impl.addField(idField, "\""+endpointId+"\"");
- // BPELWebServiceProvider.serviceName property
+ // AbstractWebServiceEndpoint.serviceName property
CtField serviceField = new CtField(stringType, "serviceName", impl);
serviceField.setModifiers(Modifier.PUBLIC);
impl.addField(serviceField,
"\""+service.toString()+"\"");
+ // AbstractWebServiceEndpoint.wsdlLocation property
+ CtField wsdlLocationField = new CtField(stringType, "wsdlLocation", impl);
+ wsdlLocationField.setModifiers(Modifier.PUBLIC);
+ impl.addField(wsdlLocationField,
"\""+wsdlRef.getWsdlFileURL().toExternalForm()+"\"");
+
+ // AbstractWebServiceEndpoint.portName property
+ CtField portNameField = new CtField(stringType, "portName", impl);
+ portNameField.setModifiers(Modifier.PUBLIC);
+ impl.addField(portNameField, "\""+port+"\"");
+
// Annotations
ClassFile classFile = impl.getClassFile();
classFile.setVersionToJava5();
@@ -105,7 +118,7 @@
);
providerAnnotation.addMemberValue(
"wsdlLocation",
- new StringMemberValue(wsdlLocation.toExternalForm(), constantPool)
+ new StringMemberValue(wsdlRef.getWsdlFileURL().toExternalForm(), constantPool)
);
attr.addAnnotation(providerAnnotation);
@@ -124,39 +137,13 @@
// Provider interface and base implementation
impl.setSuperclass(pool.get("org.jboss.soa.bpel.runtime.ws.AbstractWebServiceEndpoint"));
- CtMethod method1 = new CtMethod(
- stringType, "getEndpointId",
- new CtClass[]{},
- impl
- );
+ createStringGetter(impl, stringType, "endpointId",
"getEndpointId");
+ createStringGetter(impl, stringType, "serviceName",
"getServiceName");
+ createStringGetter(impl, stringType, "wsdlLocation",
"getWsdlLocation");
+ createStringGetter(impl, stringType, "portName", "getPortName");
- // Method body
- StringBuffer body = new StringBuffer();
- body.append("{");
- body.append("return this.endpointId;");
- body.append("}");
+ // ------------
- method1.setBody(body.toString());
- impl.addMethod(method1);
-
- // --------
-
-
- CtMethod method2 = new CtMethod(
- stringType, "getServiceName",
- new CtClass[]{},
- impl
- );
-
- // Method body
- StringBuffer body2 = new StringBuffer();
- body2.append("{");
- body2.append("return this.serviceName;");
- body2.append("}");
-
- method2.setBody(body2.toString());
- impl.addMethod(method2);
-
// freeze
impl.stopPruning(false);
impl.toClass(loader);
@@ -169,16 +156,23 @@
return obj;
}
- public static void main(String[] args) throws Exception
+ private void createStringGetter(CtClass impl, CtClass stringType, String property,
String methodName)
+ throws Exception
{
- WebServiceProviderFactory fac = new WebServiceProviderFactory();
- AbstractWebServiceEndpoint providerImpl = fac.createProvider(
- new QName("ServiceName"), "portName",
- UUID.randomUUID().toString(),
- new URL("file://some/location/hello.wsdl"),
- Thread.currentThread().getContextClassLoader()
+ CtMethod method = new CtMethod(
+ stringType, methodName,
+ new CtClass[]{},
+ impl
);
- System.out.println(providerImpl.getEndpointId());
+ // Method body
+ StringBuffer body = new StringBuffer();
+ body.append("{");
+ body.append("return this."+property+";");
+ body.append("}");
+
+ method.setBody(body.toString());
+ impl.addMethod(method);
+
}
}
Modified:
branches/hbraun/samples/quickstart/loan_approval/war/src/com/example/loan_approval/wsdl/RiskAssessmentPTImpl.java
===================================================================
---
branches/hbraun/samples/quickstart/loan_approval/war/src/com/example/loan_approval/wsdl/RiskAssessmentPTImpl.java 2009-11-05
18:57:38 UTC (rev 233)
+++
branches/hbraun/samples/quickstart/loan_approval/war/src/com/example/loan_approval/wsdl/RiskAssessmentPTImpl.java 2009-11-05
19:01:14 UTC (rev 234)
@@ -5,28 +5,28 @@
import javax.jws.WebService;
@WebService(
- endpointInterface="com.example.loan_approval.wsdl.RiskAssessmentPT",
- targetNamespace = "http://example.com/loan-approval/wsdl/",
- portName="riskAssessor_Port")
+ endpointInterface="com.example.loan_approval.wsdl.RiskAssessmentPT",
+ targetNamespace = "http://example.com/loan-approval/wsdl/",
+ portName="riskAssessor_Port")
public class RiskAssessmentPTImpl implements RiskAssessmentPT {
- public String check(
- String firstName,
- String name,
- BigInteger amount)
- throws ErrorMessage {
- System.out.println("\nRiskAssessmentPTImpl");
- System.out.println("*************************************************");
- System.out.println("firstName Parameter: " + firstName );
- System.out.println("name Parameter: " + name );
- System.out.println("amount Parameter: " + amount );
- System.out.println("*************************************************");
- System.out.println("\n");
-
- if (amount.intValue() <= 10000)
- return "low";
- else
- return "high";
- }
-
+ public String check(
+ String firstName,
+ String name,
+ BigInteger amount)
+ throws ErrorMessage {
+ System.out.println("\nRiskAssessmentPTImpl");
+ System.out.println("*************************************************");
+ System.out.println("firstName Parameter: " + firstName );
+ System.out.println("name Parameter: " + name );
+ System.out.println("amount Parameter: " + amount );
+ System.out.println("*************************************************");
+ System.out.println("\n");
+
+ if (amount.intValue() <= 10000)
+ return "low";
+ else
+ return "high";
+ }
+
}