You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by an...@apache.org on 2007/04/17 15:58:18 UTC
svn commit: r529603 - in
/incubator/tuscany/java/sca/modules/binding-ws-axis2/src/main/java/org/apache/tuscany/binding/axis2:
Axis2ReferenceBinding.java Axis2ServiceBinding.java
util/WebServiceOperationMetaData.java util/WebServicePortMetaData.java
Author: antelder
Date: Tue Apr 17 06:58:17 2007
New Revision: 529603
URL: http://svn.apache.org/viewvc?view=rev&rev=529603
Log:
Fix bugs associated with WS endpoint uri's and associated tidy up
Removed:
incubator/tuscany/java/sca/modules/binding-ws-axis2/src/main/java/org/apache/tuscany/binding/axis2/util/WebServiceOperationMetaData.java
incubator/tuscany/java/sca/modules/binding-ws-axis2/src/main/java/org/apache/tuscany/binding/axis2/util/WebServicePortMetaData.java
Modified:
incubator/tuscany/java/sca/modules/binding-ws-axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ReferenceBinding.java
incubator/tuscany/java/sca/modules/binding-ws-axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ServiceBinding.java
Modified: incubator/tuscany/java/sca/modules/binding-ws-axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ReferenceBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-ws-axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ReferenceBinding.java?view=diff&rev=529603&r1=529602&r2=529603
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-ws-axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ReferenceBinding.java (original)
+++ incubator/tuscany/java/sca/modules/binding-ws-axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ReferenceBinding.java Tue Apr 17 06:58:17 2007
@@ -19,8 +19,13 @@
package org.apache.tuscany.binding.axis2;
import java.net.URI;
+import java.util.List;
+import javax.wsdl.Binding;
+import javax.wsdl.BindingOperation;
import javax.wsdl.Definition;
+import javax.wsdl.extensions.soap.SOAPAddress;
+import javax.wsdl.extensions.soap.SOAPOperation;
import javax.xml.namespace.QName;
import org.apache.axiom.om.OMAbstractFactory;
@@ -33,8 +38,6 @@
import org.apache.axis2.description.AxisService;
import org.apache.axis2.transport.http.HTTPConstants;
import org.apache.tuscany.binding.axis2.util.TuscanyAxisConfigurator;
-import org.apache.tuscany.binding.axis2.util.WebServiceOperationMetaData;
-import org.apache.tuscany.binding.axis2.util.WebServicePortMetaData;
import org.apache.tuscany.binding.ws.WebServiceBinding;
import org.apache.tuscany.binding.ws.xml.WebServiceConstants;
import org.apache.tuscany.interfacedef.Operation;
@@ -49,13 +52,13 @@
public class Axis2ReferenceBinding extends ReferenceBindingExtension {
private WorkContext workContext;
- private WebServicePortMetaData wsPortMetaData;
private ServiceClient serviceClient;
+ private WebServiceBinding wsBinding;
public Axis2ReferenceBinding(URI name, URI targetUri, WebServiceBinding wsBinding) {
super(name, targetUri);
- this.wsPortMetaData = new WebServicePortMetaData(wsBinding.getWSDLDefinition().getDefinition(), wsBinding.getPort(), wsBinding.getURI(), false);
- this.serviceClient = createServiceClient(wsBinding.getWSDLDefinition().getDefinition(), wsPortMetaData);
+ this.wsBinding = wsBinding;
+ this.serviceClient = createServiceClient();
}
public QName getBindingType() {
@@ -72,7 +75,6 @@
Axis2AsyncTargetInvoker asyncInvoker =
(Axis2AsyncTargetInvoker) createOperationInvoker(serviceClient,
operation,
- wsPortMetaData,
true,
false);
// FIXME: This makes the (BIG) assumption that there is only one
@@ -91,7 +93,7 @@
invoker = asyncInvoker;
} else {
- invoker = createOperationInvoker(serviceClient, operation, wsPortMetaData, false, operation.isNonBlocking());
+ invoker = createOperationInvoker(serviceClient, operation, false, operation.isNonBlocking());
}
return invoker;
}
@@ -111,13 +113,14 @@
/**
* Create an Axis2 ServiceClient
*/
- protected ServiceClient createServiceClient(Definition wsdlDefinition, WebServicePortMetaData wsPortMetaData) {
+ protected ServiceClient createServiceClient() {
try {
TuscanyAxisConfigurator tuscanyAxisConfigurator = new TuscanyAxisConfigurator();
ConfigurationContext configurationContext = tuscanyAxisConfigurator.getConfigurationContext();
- QName serviceQName = wsPortMetaData.getServiceName();
- String portName = wsPortMetaData.getPortName().getLocalPart();
+ QName serviceQName = wsBinding.getServiceName();
+ String portName = wsBinding.getPortName();
+ Definition wsdlDefinition = wsBinding.getWSDLDefinition().getDefinition();
AxisService axisService = AxisService.createClientSideAxisService(wsdlDefinition, serviceQName, portName, new Options());
return new ServiceClient(configurationContext, axisService);
@@ -131,44 +134,66 @@
* Create and configure an Axis2TargetInvoker for each operations
*/
private Axis2TargetInvoker createOperationInvoker(ServiceClient serviceClient,
- Operation m,
- WebServicePortMetaData wsPortMetaData,
+ Operation operation,
boolean hasCallback,
boolean isOneWay) {
- SOAPFactory soapFactory = OMAbstractFactory.getSOAP11Factory();
- String portTypeNS = wsPortMetaData.getPortTypeName().getNamespaceURI();
-
- String methodName = m.getName();
-
- WebServiceOperationMetaData operationMetaData = wsPortMetaData.getOperationMetaData(methodName);
Options options = new Options();
- options.setTo(new EndpointReference(wsPortMetaData.getEndpoint()));
+ options.setTo(getPortLocationEPR());
options.setProperty(HTTPConstants.CHUNKED, Boolean.FALSE);
- String wsdlOperationName = operationMetaData.getBindingOperation().getOperation().getName();
+ String operationName = operation.getName();
- String soapAction = wsPortMetaData.getOperationMetaData(wsdlOperationName).getSOAPAction();
+ String soapAction = getSOAPAction(operationName);
if (soapAction != null && soapAction.length() > 1) {
options.setAction(soapAction);
}
options.setTimeOutInMilliSeconds(5 * 60 * 1000);
- QName wsdlOperationQName = new QName(portTypeNS, wsdlOperationName);
+ SOAPFactory soapFactory = OMAbstractFactory.getSOAP11Factory();
+ QName wsdlOperationQName = new QName(wsBinding.getNamespace(), operationName);
Axis2TargetInvoker invoker;
if (hasCallback) {
- invoker =
- new Axis2AsyncTargetInvoker(serviceClient, wsdlOperationQName, options, soapFactory, workContext);
+ invoker = new Axis2AsyncTargetInvoker(serviceClient, wsdlOperationQName, options, soapFactory, workContext);
} else if (isOneWay) {
- invoker =
- new Axis2OneWayTargetInvoker(serviceClient, wsdlOperationQName, options, soapFactory, workContext);
+ invoker = new Axis2OneWayTargetInvoker(serviceClient, wsdlOperationQName, options, soapFactory, workContext);
} else {
invoker = new Axis2TargetInvoker(serviceClient, wsdlOperationQName, options, soapFactory, workContext);
}
return invoker;
}
+
+ protected EndpointReference getPortLocationEPR() {
+ String ep = wsBinding.getURI();
+ if (ep == null && wsBinding.getPort() != null) {
+ List wsdlPortExtensions = wsBinding.getPort().getExtensibilityElements();
+ for (final Object extension : wsdlPortExtensions) {
+ if (extension instanceof SOAPAddress) {
+ ep = ((SOAPAddress) extension).getLocationURI();
+ break;
+ }
+ }
+ }
+ return new EndpointReference(ep);
+ }
+ protected String getSOAPAction(String operationName) {
+ Binding binding = wsBinding.getBinding();
+ if (binding != null) {
+ for (Object o : binding.getBindingOperations()) {
+ BindingOperation bop = (BindingOperation) o;
+ if (bop.getName().equalsIgnoreCase(operationName)) {
+ for (Object o2 : bop.getExtensibilityElements()) {
+ if (o2 instanceof SOAPOperation) {
+ return ((SOAPOperation)o2).getSoapActionURI();
+ }
+ }
+ }
+ }
+ }
+ return null;
+ }
}
Modified: incubator/tuscany/java/sca/modules/binding-ws-axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ServiceBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-ws-axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ServiceBinding.java?view=diff&rev=529603&r1=529602&r2=529603
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-ws-axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ServiceBinding.java (original)
+++ incubator/tuscany/java/sca/modules/binding-ws-axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ServiceBinding.java Tue Apr 17 06:58:17 2007
@@ -32,7 +32,6 @@
import java.util.concurrent.CountDownLatch;
import javax.wsdl.Definition;
-import javax.wsdl.PortType;
import javax.xml.namespace.QName;
import org.apache.axiom.om.OMElement;
@@ -48,7 +47,6 @@
import org.apache.axis2.engine.MessageReceiver;
import org.apache.axis2.wsdl.WSDLConstants;
import org.apache.axis2.wsdl.WSDLConstants.WSDL20_2004Constants;
-import org.apache.tuscany.binding.axis2.util.WebServicePortMetaData;
import org.apache.tuscany.binding.ws.WebServiceBinding;
import org.apache.tuscany.http.ServletHostExtensionPoint;
import org.apache.tuscany.interfacedef.InterfaceContract;
@@ -132,13 +130,14 @@
private AxisService createAxisService(WebServiceBinding wsBinding) throws AxisFault {
Definition definition = wsBinding.getWSDLDefinition().getDefinition();
- WebServicePortMetaData wsdlPortInfo =
- new WebServicePortMetaData(definition, wsBinding.getPort(), null, false);
- // TODO investigate if this is 20 wsdl what todo?
- WSDLToAxisServiceBuilder builder =
- new WSDL11ToAxisServiceBuilder(definition, wsdlPortInfo.getServiceName(), wsdlPortInfo.getPort()
- .getName());
+ // WSDLToAxisServiceBuilder only uses the service and port to find the wsdl4J Binding
+ // An SCA service with binding.ws does not require a service or port so we may not have these
+ // but
+
+ QName wsdlServiceName = wsBinding.getServiceName();
+ String wsdlPortName = wsBinding.getPortName();
+ WSDLToAxisServiceBuilder builder = new WSDL11ToAxisServiceBuilder(definition, wsdlServiceName, wsdlPortName );
builder.setServerSide(true);
AxisService axisService = builder.populateService();
@@ -156,14 +155,10 @@
Parameter userWSDL = new Parameter("useOriginalwsdl", "true");
axisService.addParameter(userWSDL);
- PortType wsdlPortType = wsdlPortInfo.getPortType();
- for (Object o : wsdlPortType.getOperations()) {
- javax.wsdl.Operation wsdlOperation = (javax.wsdl.Operation) o;
- String operationName = wsdlOperation.getName();
-
- Operation op = getOperation(operationName);
+ for (Iterator i = axisService.getOperations(); i.hasNext();) {
+ AxisOperation axisOp = (AxisOperation) i.next();
+ Operation op = getOperation(axisOp);
if (op != null) {
- AxisOperation axisOp = axisService.getOperation(new QName(definition.getTargetNamespace(), operationName));
if (op.isNonBlocking()) {
axisOp.setMessageExchangePattern(WSDL20_2004Constants.MEP_URI_IN_ONLY);
@@ -186,7 +181,8 @@
return axisService;
}
- protected Operation getOperation(String operationName) {
+ protected Operation getOperation(AxisOperation axisOp) {
+ String operationName = axisOp.getName().getLocalPart();
for (Operation op : serviceContract.getInterface().getOperations()) {
if (op.getName().equalsIgnoreCase(operationName)) {
return op;
@@ -283,16 +279,8 @@
* Get the Method from an interface matching the WSDL operation name
*/
protected Method getMethod(Class<?> serviceInterface, String operationName) throws BuilderConfigException {
- // Note: this doesn't support overloaded operations
- Method[] methods = serviceInterface.getMethods();
- for (Method m : methods) {
- if (m.getName().equals(operationName)) {
- return m;
- }
- // tolerate WSDL with capatalized operation name
- StringBuilder sb = new StringBuilder(operationName);
- sb.setCharAt(0, Character.toLowerCase(sb.charAt(0)));
- if (m.getName().equals(sb.toString())) {
+ for (Method m : serviceInterface.getMethods()) {
+ if (m.getName().equalsIgnoreCase(operationName)) {
return m;
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org