You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by ba...@apache.org on 2007/06/26 20:45:59 UTC
svn commit: r550909 - in /webservices/axis2/trunk/java/modules/metadata:
src/org/apache/axis2/jaxws/description/
src/org/apache/axis2/jaxws/description/impl/
test/org/apache/axis2/jaxws/description/
Author: barrettj
Date: Tue Jun 26 11:45:58 2007
New Revision: 550909
URL: http://svn.apache.org/viewvc?view=rev&rev=550909
Log:
Fix getSyncOperation logic to return the sync operation corresponding to a JAX-WS client async method or null if one does not exist or can not be found.
Add associated test and comments on the interface for the OperationDescription method.
Added:
webservices/axis2/trunk/java/modules/metadata/test/org/apache/axis2/jaxws/description/GetSyncOperationTests.java
Modified:
webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/OperationDescription.java
webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/EndpointDescriptionImpl.java
webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/OperationDescriptionImpl.java
Modified: webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/OperationDescription.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/OperationDescription.java?view=diff&rev=550909&r1=550908&r2=550909
==============================================================================
--- webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/OperationDescription.java (original)
+++ webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/OperationDescription.java Tue Jun 26 11:45:58 2007
@@ -190,5 +190,18 @@
public void setOperationRuntimeDesc(OperationRuntimeDescription ord);
+ /**
+ * For JAX-WS client-side async operations, this will return the corresponding sync
+ * OperationDescription.
+ *
+ * Note that if this method is used within the metadata layer, it is possible that it will return
+ * null. That will happen if the metadata layer is constructed from annotations on the SEI
+ * (not WSDL). In that case, it is possible that the async methods on the SEI are processed
+ * before the sync method. In that case, there will be no sync method yet. If this method
+ * is called outside the metadata layer, then if the async methods exist, the sync method
+ * should also exist.
+ *
+ * @return OperationDescription corresponding to the sync operation, or null (see note above).
+ */
public OperationDescription getSyncOperation();
}
Modified: webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/EndpointDescriptionImpl.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/EndpointDescriptionImpl.java?view=diff&rev=550909&r1=550908&r2=550909
==============================================================================
--- webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/EndpointDescriptionImpl.java (original)
+++ webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/EndpointDescriptionImpl.java Tue Jun 26 11:45:58 2007
@@ -336,8 +336,8 @@
} else if (composite.getWsdlDefinition() == null) {
//This is a SOAP12 binding that does not contain a WSDL definition, log a WARNING
- log.warn("This implementation does not contain a WSDL definition and uses a SOAP 1.2 based binding. " +
- "Per JAXWS spec. - a WSDL definition cannot be generated for this implementation. Name: "
+ log.warn("This implementation does not contain a WSDL definition and is not a SOAP 1.1 based binding. "
+ + "Per JAXWS spec. - a WSDL definition cannot be generated for this implementation. Name: "
+ composite.getClassName());
}
Modified: webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/OperationDescriptionImpl.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/OperationDescriptionImpl.java?view=diff&rev=550909&r1=550908&r2=550909
==============================================================================
--- webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/OperationDescriptionImpl.java (original)
+++ webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/OperationDescriptionImpl.java Tue Jun 26 11:45:58 2007
@@ -162,7 +162,9 @@
private Boolean webResultHeader;
private Method serviceImplMethod;
private boolean serviceImplMethodFound = false;
- private OperationDescription syncOperationDescription;
+ // For JAX-WS client async methods, this is the corresponding Sync method; for everything else,
+ // this is "this".
+ private OperationDescription syncOperationDescription = null;
// RUNTIME INFORMATION
Map<String, OperationRuntimeDescription> runtimeDescMap =
Collections.synchronizedMap(new HashMap<String, OperationRuntimeDescription>());
@@ -727,37 +729,46 @@
return webMethodOperationName;
}
- //Review:
- //Adding method to get Sync operation's Operation Description
+ /* (non-Javadoc)
+ * @see org.apache.axis2.jaxws.description.OperationDescription#getSyncOperation()
+ */
public OperationDescription getSyncOperation() {
- OperationDescription opDesc = this;
- if (!isJAXWSAsyncClientMethod()) {
- return this;
- }
- if (this.syncOperationDescription != null) {
- return syncOperationDescription;
- }
- String webMethodAnnoName = getOperationName();
- String javaMethodName = getJavaMethodName();
- if (webMethodAnnoName != null && webMethodAnnoName.length() > 0 &&
- webMethodAnnoName != javaMethodName) {
- EndpointInterfaceDescription eid = getEndpointInterfaceDescription();
- if (eid != null) {
- //searching for opDesc of sync operation.
- OperationDescription[] ods = null;
- ods = eid.getOperationForJavaMethod(webMethodAnnoName);
- if (ods != null) {
- for (OperationDescription od : ods) {
- if (od.getJavaMethodName().equals(webMethodAnnoName)) {
- opDesc = od;
- break;
+
+ if (syncOperationDescription != null) {
+ // No need to do anything; the sync operation has already been set and will be
+ // returned below
+ } else if (!isJAXWSAsyncClientMethod()) {
+ // The current OpDesc is not an async operation. Cache it, then return it below.
+ syncOperationDescription = this;
+ } else {
+ // We haven't found a sync opdesc for this operation yet, so try again. See the
+ // comments in the interface declaration for this method on why this might occur.
+ OperationDescription opDesc = null;
+
+ String webMethodAnnoName = getOperationName();
+ String javaMethodName = getJavaMethodName();
+ if (webMethodAnnoName != null && webMethodAnnoName.length() > 0 &&
+ webMethodAnnoName != javaMethodName) {
+ EndpointInterfaceDescription eid = getEndpointInterfaceDescription();
+ if (eid != null) {
+ //searching for opDesc of sync operation.
+ OperationDescription[] ods = null;
+ ods = eid.getOperationForJavaMethod(webMethodAnnoName);
+ if (ods != null) {
+ for (OperationDescription od : ods) {
+ if (od.getJavaMethodName().equals(webMethodAnnoName)
+ && !od.isJAXWSAsyncClientMethod()) {
+ opDesc = od;
+ break;
+ }
}
}
}
}
+ // Note that opDesc might still be null
+ syncOperationDescription = opDesc;
}
- syncOperationDescription = opDesc;
- return opDesc;
+ return syncOperationDescription;
}
public String getAction() {
Added: webservices/axis2/trunk/java/modules/metadata/test/org/apache/axis2/jaxws/description/GetSyncOperationTests.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/metadata/test/org/apache/axis2/jaxws/description/GetSyncOperationTests.java?view=auto&rev=550909
==============================================================================
--- webservices/axis2/trunk/java/modules/metadata/test/org/apache/axis2/jaxws/description/GetSyncOperationTests.java (added)
+++ webservices/axis2/trunk/java/modules/metadata/test/org/apache/axis2/jaxws/description/GetSyncOperationTests.java Tue Jun 26 11:45:58 2007
@@ -0,0 +1,118 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.axis2.jaxws.description;
+
+import javax.jws.WebMethod;
+import javax.jws.WebService;
+import javax.xml.namespace.QName;
+import javax.xml.ws.AsyncHandler;
+import javax.xml.ws.Response;
+
+import java.util.concurrent.Future;
+
+import junit.framework.TestCase;
+
+/**
+ *
+ */
+public class GetSyncOperationTests extends TestCase {
+
+ public void testNoSyncOperation() {
+ ServiceDescription sDesc =
+ DescriptionFactory.createServiceDescription(null,
+ new QName("org.apache.axis2.jaxws.description", "syncOperationTestService2"),
+ javax.xml.ws.Service.class);
+ EndpointDescription eDesc =
+ DescriptionFactory.updateEndpoint(sDesc,
+ AsyncOnlySEI.class,
+ new QName("org.apache.axis2.jaxws.description", "syncOperationTestPort2"),
+ DescriptionFactory.UpdateType.GET_PORT);
+ EndpointInterfaceDescription eiDesc = eDesc.getEndpointInterfaceDescription();
+ OperationDescription opDescs[] = eiDesc.getOperations();
+ assertNotNull(opDescs);
+ assertEquals(2, opDescs.length);
+ // Make sure each of the async operations reference the sync opDesc
+ int asyncOperations = 0;
+ OperationDescription syncOpDescs[] = eiDesc.getOperationForJavaMethod("echo");
+ assertNull(syncOpDescs);
+ for (OperationDescription opDesc : opDescs) {
+ if (opDesc.isJAXWSAsyncClientMethod()) {
+ asyncOperations++;
+ }
+ // Since there isn't a sync method in the (invalid) SEI, then this should return null
+ assertNull(opDesc.getSyncOperation());
+ }
+ assertEquals(2, asyncOperations);
+ }
+
+ public void testSyncOperation() {
+ ServiceDescription sDesc =
+ DescriptionFactory.createServiceDescription(null,
+ new QName("org.apache.axis2.jaxws.description", "syncOperationTestService1"),
+ javax.xml.ws.Service.class);
+ EndpointDescription eDesc =
+ DescriptionFactory.updateEndpoint(sDesc,
+ SyncAndAsyncSEI.class,
+ new QName("org.apache.axis2.jaxws.description", "syncOperationTestPort1"),
+ DescriptionFactory.UpdateType.GET_PORT);
+ EndpointInterfaceDescription eiDesc = eDesc.getEndpointInterfaceDescription();
+ OperationDescription opDescs[] = eiDesc.getOperations();
+ assertNotNull(opDescs);
+ assertEquals(3, opDescs.length);
+ // Make sure each of the async operations reference the sync opDesc
+ int asyncOperations = 0;
+ OperationDescription syncOpDescs[] = eiDesc.getOperationForJavaMethod("echo");
+ assertNotNull(syncOpDescs);
+ assertEquals(1, syncOpDescs.length);
+ OperationDescription syncOpDesc = syncOpDescs[0];
+
+ for (OperationDescription opDesc : opDescs) {
+ if (opDesc.isJAXWSAsyncClientMethod()) {
+ asyncOperations++;
+ }
+ // Make sure all the operations point to the sync operation
+ assertEquals(syncOpDesc, opDesc.getSyncOperation());
+ }
+
+ assertEquals(2, asyncOperations);
+ }
+
+
+}
+
+@WebService
+interface AsyncOnlySEI {
+ // Note this is an INVALID SEI since it only contains the
+ // JAXWS client async methods, and not the corresponding sync
+ // method.
+ @WebMethod(operationName = "echo")
+ public Response<String> echoAsync(String toEcho);
+ @WebMethod(operationName = "echo")
+ public Future<?> echoAsync(String toEcho, AsyncHandler<String> asyncHandler);
+}
+
+@WebService
+interface SyncAndAsyncSEI {
+ @WebMethod(operationName = "echo")
+ public Response<String> echoAsync(String toEcho);
+ @WebMethod(operationName = "echo")
+ public Future<?> echoAsync(String toEcho, AsyncHandler<String> asyncHandler);
+ @WebMethod(operationName = "echo")
+ public String echo(String toEcho);
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org