You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by ba...@apache.org on 2008/03/29 21:41:10 UTC
svn commit: r642603 - in /webservices/axis2/trunk/java/modules:
jaxws-integration/test/org/apache/axis2/jaxws/sample/parallelasync/server/
metadata/src/org/apache/axis2/jaxws/description/impl/
Author: barrettj
Date: Sat Mar 29 13:41:09 2008
New Revision: 642603
URL: http://svn.apache.org/viewvc?rev=642603&view=rev
Log:
AXIS2-3679
Create dispatchableOperations list after both the WSDL-based operations and SEI operations (which includes annotations) have been processed on the client side.
Modified:
webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/parallelasync/server/AsyncPort.java
webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/EndpointInterfaceDescriptionImpl.java
webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/OperationDescriptionImpl.java
Modified: webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/parallelasync/server/AsyncPort.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/parallelasync/server/AsyncPort.java?rev=642603&r1=642602&r2=642603&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/parallelasync/server/AsyncPort.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/parallelasync/server/AsyncPort.java Sat Mar 29 13:41:09 2008
@@ -264,10 +264,8 @@
* @return
* returns java.lang.String
*/
-// TODO: This causes validation failures when using the Sun JDK.
-// https://issues.apache.org/jira/browse/AXIS2-3679
-// @WebMethod(exclude=true)
-// public String customAsync(
-// String request);
+ @WebMethod(exclude=true)
+ public String customAsync(
+ String request);
}
Modified: webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/EndpointInterfaceDescriptionImpl.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/EndpointInterfaceDescriptionImpl.java?rev=642603&r1=642602&r2=642603&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/EndpointInterfaceDescriptionImpl.java (original)
+++ webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/EndpointInterfaceDescriptionImpl.java Sat Mar 29 13:41:09 2008
@@ -63,7 +63,7 @@
private EndpointDescriptionImpl parentEndpointDescription;
private ArrayList<OperationDescription> operationDescriptions =
new ArrayList<OperationDescription>();
- private Map<QName, List<OperationDescription>> dispatchableOperations = new HashMap<QName, List<OperationDescription>>();
+ private Map<QName, List<OperationDescription>> dispatchableOperations;
private DescriptionBuilderComposite dbc;
//Logging setup
@@ -96,19 +96,15 @@
public static final javax.jws.soap.SOAPBinding.ParameterStyle SOAPBinding_ParameterStyle_DEFAULT =
javax.jws.soap.SOAPBinding.ParameterStyle.WRAPPED;
+ /**
+ * Add the operationDescription to the list of operations. Note that we can not create the
+ * list of dispatchable operations at this points.
+ * @see #initializeDispatchableOperationsList()
+ *
+ * @param operation The operation description to add to this endpoint interface
+ */
void addOperation(OperationDescription operation) {
operationDescriptions.add(operation);
- // Don't put JAXWS client async methods OR excluded methods into the
- // dispatchable operations list.
- if (!operation.isJAXWSAsyncClientMethod()
- && !operation.isExcluded()) {
- List<OperationDescription> operations = dispatchableOperations.get(operation.getName());
- if(operations == null) {
- operations = new ArrayList<OperationDescription>();
- dispatchableOperations.put(operation.getName(), operations);
- }
- operations.add(operation);
- }
}
/**
@@ -495,6 +491,14 @@
public OperationDescription[] getDispatchableOperation(QName operationQName) {
//FIXME:OperationDescriptionImpl creates operation qname with empty namespace. Thus using localname
//to read dispachable operation.
+ // REVIEW: Can this be synced at a more granular level? Can't sync on dispatchableOperations because
+ // it may be null, but also the initialization must finish before next thread sees
+ // dispatachableOperations != null
+ synchronized(this) {
+ if (dispatchableOperations == null) {
+ initializeDispatchableOperationsList();
+ }
+ }
QName key = new QName("",operationQName.getLocalPart());
List<OperationDescription> operations = dispatchableOperations.get(key);
if(operations!=null){
@@ -507,6 +511,11 @@
*/
public OperationDescription[] getDispatchableOperations() {
OperationDescription[] returnOperations = null;
+
+ if (dispatchableOperations == null) {
+ initializeDispatchableOperationsList();
+ }
+
Collection<List<OperationDescription>> dispatchableValues = dispatchableOperations.values();
Iterator<List<OperationDescription>> iteratorValues = dispatchableValues.iterator();
ArrayList<OperationDescription> allDispatchableOperations = new ArrayList<OperationDescription>();
@@ -518,6 +527,34 @@
returnOperations = allDispatchableOperations.toArray(new OperationDescription[allDispatchableOperations.size()]);
}
return returnOperations;
+ }
+
+ /**
+ * Create the list of dispatchable operations from the list of all the operations. A
+ * dispatchable operation is one that can be invoked on the endpoint, so it DOES NOT include:
+ * - JAXWS Client Async methods
+ * - Methods that have been excluded via WebMethod.exclude annotation
+ *
+ * Note: We have to create the list of dispatchable operations in a lazy way; we can't
+ * create it as the operations are added via addOperations() because on the client
+ * that list is built in two parts; first using AxisOperations from the WSDL, which will
+ * not have any annotation information (such as WebMethod.exclude). That list will then
+ * be updated with SEI information, which is the point annotation information becomes
+ * available.
+ */
+ private void initializeDispatchableOperationsList() {
+ dispatchableOperations = new HashMap<QName, List<OperationDescription>>();
+ OperationDescription[] opDescs = getOperations();
+ for (OperationDescription opDesc : opDescs) {
+ if (!opDesc.isJAXWSAsyncClientMethod() && !opDesc.isExcluded()) {
+ List<OperationDescription> dispatchableOperationsWithName = dispatchableOperations.get(opDesc.getName());
+ if(dispatchableOperationsWithName == null) {
+ dispatchableOperationsWithName = new ArrayList<OperationDescription>();
+ dispatchableOperations.put(opDesc.getName(), dispatchableOperationsWithName);
+ }
+ dispatchableOperationsWithName.add(opDesc);
+ }
+ }
}
/**
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?rev=642603&r1=642602&r2=642603&view=diff
==============================================================================
--- 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 Sat Mar 29 13:41:09 2008
@@ -812,6 +812,17 @@
// ANNOTATION: WebMethod
// =====================================
public WebMethod getAnnoWebMethod() {
+ if (webMethodAnnotation == null) {
+ if (isDBC() && methodComposite != null) {
+ webMethodAnnotation = methodComposite.getWebMethodAnnot();
+ } else if (!isDBC() && seiMethod != null) {
+ webMethodAnnotation = (WebMethod) getAnnotation(seiMethod, WebMethod.class);
+ } else {
+ if (log.isDebugEnabled()) {
+ log.debug("Unable to get WebMethod annotation");
+ }
+ }
+ }
return webMethodAnnotation;
}
@@ -1565,11 +1576,9 @@
// ANNOTATION: OneWay
// ===========================================
public Oneway getAnnoOneway() {
- //TODO: Shouldn't really do it this way...if there is not Oneway annotation,
- // we will always be calling the methods to try to retrieve it, since
- // it will always be null, should consider relying on 'isOneWay'
-
if (onewayAnnotation == null) {
+ // Get the onew-way annotation from either the method composite (server-side)
+ // or from the SEI method (client-side).
if (isDBC() && methodComposite != null) {
if (methodComposite.isOneWay()) {
onewayAnnotation = OneWayAnnot.createOneWayAnnotImpl();
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org
Re: synchronized (this) (Re: svn commit: r642603 - in /webservices/axis2/trunk/java/modules: jaxws-integration/test/org/apache/axis2/jaxws/sample/parallelasync/server/ metadata/src/org/apache/axis2/jaxws/description/impl/)
Posted by Jeff Barrett <ba...@us.ibm.com>.
Hi Dims,
Good catch! That was by oversight, not by design. Fixing it now.
Thanks again!
Thanks,
Jeff
IBM Software Group - WebSphere Web Services Development
Phone: 512-838-4587 or Tie Line 678-4587
Internet e-mail and Sametime ID: barrettj@us.ibm.com
Davanum Srinivas <da...@gmail.com>
03/29/2008 04:09 PM
To
barrettj@apache.org
cc
Axis developer list <ax...@ws.apache.org>
Subject
synchronized (this) (Re: svn commit: r642603 - in
/webservices/axis2/trunk/java/modules:
jaxws-integration/test/org/apache/axis2/jaxws/sample/parallelasync/server/
metadata/src/org/apache/axis2/jaxws/description/impl/)
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Jeff,
Just curious, I see a "synchronized(this)" around
initializeDispatchableOperationsList only in getDispatchableOperation
and not in getDispatchableOperations. Is this by design?
thanks,
dims
barrettj@apache.org wrote:
| Author: barrettj
| Date: Sat Mar 29 13:41:09 2008
| New Revision: 642603
|
| URL: http://svn.apache.org/viewvc?rev=642603&view=rev
| Log:
| AXIS2-3679
| Create dispatchableOperations list after both the WSDL-based operations
and SEI operations (which includes
annotations) have been processed on the client side.
|
| Modified:
|
webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/parallelasync/server/AsyncPort.java
|
webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/EndpointInterfaceDescriptionImpl.java
|
webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/OperationDescriptionImpl.java
|
| Modified:
webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/parallelasync/server/AsyncPort.java
| URL:
http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/parallelasync/server/AsyncPort.java?rev=642603&r1=642602&r2=642603&view=diff
|
==============================================================================
| ---
webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/parallelasync/server/AsyncPort.java
(original)
| +++
webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/parallelasync/server/AsyncPort.java
Sat Mar 29 13:41:09 2008
| @@ -264,10 +264,8 @@
| * @return
| * returns java.lang.String
| */
| -// TODO: This causes validation failures when using the Sun JDK.
| -// https://issues.apache.org/jira/browse/AXIS2-3679
| -// @WebMethod(exclude=true)
| -// public String customAsync(
| -// String request);
| + @WebMethod(exclude=true)
| + public String customAsync(
| + String request);
|
| }
|
| Modified:
webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/EndpointInterfaceDescriptionImpl.java
| URL:
http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/EndpointInterfaceDescriptionImpl.java?rev=642603&r1=642602&r2=642603&view=diff
|
==============================================================================
| ---
webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/EndpointInterfaceDescriptionImpl.java
(original)
| +++
webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/EndpointInterfaceDescriptionImpl.java
Sat Mar 29 13:41:09 2008
| @@ -63,7 +63,7 @@
| private EndpointDescriptionImpl parentEndpointDescription;
| private ArrayList<OperationDescription> operationDescriptions =
| new ArrayList<OperationDescription>();
| - private Map<QName, List<OperationDescription>>
dispatchableOperations = new HashMap<QName,
List<OperationDescription>>();
| + private Map<QName, List<OperationDescription>>
dispatchableOperations;
| private DescriptionBuilderComposite dbc;
|
| //Logging setup
| @@ -96,19 +96,15 @@
| public static final javax.jws.soap.SOAPBinding.ParameterStyle
SOAPBinding_ParameterStyle_DEFAULT =
| javax.jws.soap.SOAPBinding.ParameterStyle.WRAPPED;
|
| + /**
| + * Add the operationDescription to the list of operations. Note
that we can not create the
| + * list of dispatchable operations at this points.
| + * @see #initializeDispatchableOperationsList()
| + *
| + * @param operation The operation description to add to this
endpoint interface
| + */
| void addOperation(OperationDescription operation) {
| operationDescriptions.add(operation);
| - // Don't put JAXWS client async methods OR excluded methods
into the
| - // dispatchable operations list.
| - if (!operation.isJAXWSAsyncClientMethod()
| - && !operation.isExcluded()) {
| - List<OperationDescription> operations =
dispatchableOperations.get(operation.getName());
| - if(operations == null) {
| - operations = new ArrayList<OperationDescription>();
| - dispatchableOperations.put(operation.getName(),
operations);
| - }
| - operations.add(operation);
| - }
| }
|
| /**
| @@ -495,6 +491,14 @@
| public OperationDescription[] getDispatchableOperation(QName
operationQName) {
| //FIXME:OperationDescriptionImpl creates operation qname
with empty namespace. Thus using localname
| //to read dispachable operation.
| + // REVIEW: Can this be synced at a more granular level? Can't
sync on dispatchableOperations because
| + // it may be null, but also the initialization must
finish before next thread sees
| + // dispatachableOperations != null
| + synchronized(this) {
| + if (dispatchableOperations == null) {
| + initializeDispatchableOperationsList();
| + }
| + }
| QName key = new QName("",operationQName.getLocalPart());
| List<OperationDescription> operations =
dispatchableOperations.get(key);
| if(operations!=null){
| @@ -507,6 +511,11 @@
| */
| public OperationDescription[] getDispatchableOperations() {
| OperationDescription[] returnOperations = null;
| +
| + if (dispatchableOperations == null) {
| + initializeDispatchableOperationsList();
| + }
| +
| Collection<List<OperationDescription>> dispatchableValues =
dispatchableOperations.values();
| Iterator<List<OperationDescription>> iteratorValues =
dispatchableValues.iterator();
| ArrayList<OperationDescription> allDispatchableOperations = new
ArrayList<OperationDescription>();
| @@ -518,6 +527,34 @@
| returnOperations = allDispatchableOperations.toArray(new
OperationDescription[allDispatchableOperations.size()]);
| }
| return returnOperations;
| + }
| +
| + /**
| + * Create the list of dispatchable operations from the list of all
the operations. A
| + * dispatchable operation is one that can be invoked on the
endpoint, so it DOES NOT include:
| + * - JAXWS Client Async methods
| + * - Methods that have been excluded via WebMethod.exclude
annotation
| + *
| + * Note: We have to create the list of dispatchable operations in a
lazy way; we can't
| + * create it as the operations are added via addOperations()
because on the client
| + * that list is built in two parts; first using AxisOperations from
the WSDL, which will
| + * not have any annotation information (such as WebMethod.exclude).
That list will then
| + * be updated with SEI information, which is the point annotation
information becomes
| + * available.
| + */
| + private void initializeDispatchableOperationsList() {
| + dispatchableOperations = new HashMap<QName,
List<OperationDescription>>();
| + OperationDescription[] opDescs = getOperations();
| + for (OperationDescription opDesc : opDescs) {
| + if (!opDesc.isJAXWSAsyncClientMethod() &&
!opDesc.isExcluded()) {
| + List<OperationDescription> dispatchableOperationsWithName
= dispatchableOperations.get(opDesc.getName());
| + if(dispatchableOperationsWithName == null) {
| + dispatchableOperationsWithName = new
ArrayList<OperationDescription>();
| + dispatchableOperations.put(opDesc.getName(),
dispatchableOperationsWithName);
| + }
| + dispatchableOperationsWithName.add(opDesc);
| + }
| + }
| }
|
| /**
|
| 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?rev=642603&r1=642602&r2=642603&view=diff
|
==============================================================================
| ---
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
Sat Mar 29 13:41:09 2008
| @@ -812,6 +812,17 @@
| // ANNOTATION: WebMethod
| // =====================================
| public WebMethod getAnnoWebMethod() {
| + if (webMethodAnnotation == null) {
| + if (isDBC() && methodComposite != null) {
| + webMethodAnnotation =
methodComposite.getWebMethodAnnot();
| + } else if (!isDBC() && seiMethod != null) {
| + webMethodAnnotation = (WebMethod)
getAnnotation(seiMethod, WebMethod.class);
| + } else {
| + if (log.isDebugEnabled()) {
| + log.debug("Unable to get WebMethod annotation");
| + }
| + }
| + }
| return webMethodAnnotation;
| }
|
| @@ -1565,11 +1576,9 @@
| // ANNOTATION: OneWay
| // ===========================================
| public Oneway getAnnoOneway() {
| - //TODO: Shouldn't really do it this way...if there is not
Oneway annotation,
| - // we will always be calling the methods to try to
retrieve it, since
| - // it will always be null, should consider relying on
'isOneWay'
| -
| if (onewayAnnotation == null) {
| + // Get the onew-way annotation from either the method
composite (server-side)
| + // or from the SEI method (client-side).
| if (isDBC() && methodComposite != null) {
| if (methodComposite.isOneWay()) {
| onewayAnnotation =
OneWayAnnot.createOneWayAnnotImpl();
|
|
|
| ---------------------------------------------------------------------
| To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
| For additional commands, e-mail: axis-cvs-help@ws.apache.org
|
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.5 (Cygwin)
iD8DBQFH7q/1gNg6eWEDv1kRAlcbAJ9ADbLQbo7PddwgbHbP5V+EqRuQLgCeIsNl
60LJrzl1yyTuKNjpFcnDxMM=
=GOa2
-----END PGP SIGNATURE-----
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-dev-help@ws.apache.org
synchronized (this) (Re: svn commit: r642603 - in /webservices/axis2/trunk/java/modules:
jaxws-integration/test/org/apache/axis2/jaxws/sample/parallelasync/server/
metadata/src/org/apache/axis2/jaxws/description/impl/)
Posted by Davanum Srinivas <da...@gmail.com>.
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Jeff,
Just curious, I see a "synchronized(this)" around initializeDispatchableOperationsList only in getDispatchableOperation
and not in getDispatchableOperations. Is this by design?
thanks,
dims
barrettj@apache.org wrote:
| Author: barrettj
| Date: Sat Mar 29 13:41:09 2008
| New Revision: 642603
|
| URL: http://svn.apache.org/viewvc?rev=642603&view=rev
| Log:
| AXIS2-3679
| Create dispatchableOperations list after both the WSDL-based operations and SEI operations (which includes
annotations) have been processed on the client side.
|
| Modified:
|
webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/parallelasync/server/AsyncPort.java
|
webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/EndpointInterfaceDescriptionImpl.java
|
webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/OperationDescriptionImpl.java
|
| Modified:
webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/parallelasync/server/AsyncPort.java
| URL:
http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/parallelasync/server/AsyncPort.java?rev=642603&r1=642602&r2=642603&view=diff
| ==============================================================================
| ---
webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/parallelasync/server/AsyncPort.java
(original)
| +++
webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/sample/parallelasync/server/AsyncPort.java
Sat Mar 29 13:41:09 2008
| @@ -264,10 +264,8 @@
| * @return
| * returns java.lang.String
| */
| -// TODO: This causes validation failures when using the Sun JDK.
| -// https://issues.apache.org/jira/browse/AXIS2-3679
| -// @WebMethod(exclude=true)
| -// public String customAsync(
| -// String request);
| + @WebMethod(exclude=true)
| + public String customAsync(
| + String request);
|
| }
|
| Modified:
webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/EndpointInterfaceDescriptionImpl.java
| URL:
http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/EndpointInterfaceDescriptionImpl.java?rev=642603&r1=642602&r2=642603&view=diff
| ==============================================================================
| ---
webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/EndpointInterfaceDescriptionImpl.java
(original)
| +++
webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/EndpointInterfaceDescriptionImpl.java
Sat Mar 29 13:41:09 2008
| @@ -63,7 +63,7 @@
| private EndpointDescriptionImpl parentEndpointDescription;
| private ArrayList<OperationDescription> operationDescriptions =
| new ArrayList<OperationDescription>();
| - private Map<QName, List<OperationDescription>> dispatchableOperations = new HashMap<QName,
List<OperationDescription>>();
| + private Map<QName, List<OperationDescription>> dispatchableOperations;
| private DescriptionBuilderComposite dbc;
|
| //Logging setup
| @@ -96,19 +96,15 @@
| public static final javax.jws.soap.SOAPBinding.ParameterStyle SOAPBinding_ParameterStyle_DEFAULT =
| javax.jws.soap.SOAPBinding.ParameterStyle.WRAPPED;
|
| + /**
| + * Add the operationDescription to the list of operations. Note that we can not create the
| + * list of dispatchable operations at this points.
| + * @see #initializeDispatchableOperationsList()
| + *
| + * @param operation The operation description to add to this endpoint interface
| + */
| void addOperation(OperationDescription operation) {
| operationDescriptions.add(operation);
| - // Don't put JAXWS client async methods OR excluded methods into the
| - // dispatchable operations list.
| - if (!operation.isJAXWSAsyncClientMethod()
| - && !operation.isExcluded()) {
| - List<OperationDescription> operations = dispatchableOperations.get(operation.getName());
| - if(operations == null) {
| - operations = new ArrayList<OperationDescription>();
| - dispatchableOperations.put(operation.getName(), operations);
| - }
| - operations.add(operation);
| - }
| }
|
| /**
| @@ -495,6 +491,14 @@
| public OperationDescription[] getDispatchableOperation(QName operationQName) {
| //FIXME:OperationDescriptionImpl creates operation qname with empty namespace. Thus using localname
| //to read dispachable operation.
| + // REVIEW: Can this be synced at a more granular level? Can't sync on dispatchableOperations because
| + // it may be null, but also the initialization must finish before next thread sees
| + // dispatachableOperations != null
| + synchronized(this) {
| + if (dispatchableOperations == null) {
| + initializeDispatchableOperationsList();
| + }
| + }
| QName key = new QName("",operationQName.getLocalPart());
| List<OperationDescription> operations = dispatchableOperations.get(key);
| if(operations!=null){
| @@ -507,6 +511,11 @@
| */
| public OperationDescription[] getDispatchableOperations() {
| OperationDescription[] returnOperations = null;
| +
| + if (dispatchableOperations == null) {
| + initializeDispatchableOperationsList();
| + }
| +
| Collection<List<OperationDescription>> dispatchableValues = dispatchableOperations.values();
| Iterator<List<OperationDescription>> iteratorValues = dispatchableValues.iterator();
| ArrayList<OperationDescription> allDispatchableOperations = new ArrayList<OperationDescription>();
| @@ -518,6 +527,34 @@
| returnOperations = allDispatchableOperations.toArray(new
OperationDescription[allDispatchableOperations.size()]);
| }
| return returnOperations;
| + }
| +
| + /**
| + * Create the list of dispatchable operations from the list of all the operations. A
| + * dispatchable operation is one that can be invoked on the endpoint, so it DOES NOT include:
| + * - JAXWS Client Async methods
| + * - Methods that have been excluded via WebMethod.exclude annotation
| + *
| + * Note: We have to create the list of dispatchable operations in a lazy way; we can't
| + * create it as the operations are added via addOperations() because on the client
| + * that list is built in two parts; first using AxisOperations from the WSDL, which will
| + * not have any annotation information (such as WebMethod.exclude). That list will then
| + * be updated with SEI information, which is the point annotation information becomes
| + * available.
| + */
| + private void initializeDispatchableOperationsList() {
| + dispatchableOperations = new HashMap<QName, List<OperationDescription>>();
| + OperationDescription[] opDescs = getOperations();
| + for (OperationDescription opDesc : opDescs) {
| + if (!opDesc.isJAXWSAsyncClientMethod() && !opDesc.isExcluded()) {
| + List<OperationDescription> dispatchableOperationsWithName = dispatchableOperations.get(opDesc.getName());
| + if(dispatchableOperationsWithName == null) {
| + dispatchableOperationsWithName = new ArrayList<OperationDescription>();
| + dispatchableOperations.put(opDesc.getName(), dispatchableOperationsWithName);
| + }
| + dispatchableOperationsWithName.add(opDesc);
| + }
| + }
| }
|
| /**
|
| 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?rev=642603&r1=642602&r2=642603&view=diff
| ==============================================================================
| ---
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
Sat Mar 29 13:41:09 2008
| @@ -812,6 +812,17 @@
| // ANNOTATION: WebMethod
| // =====================================
| public WebMethod getAnnoWebMethod() {
| + if (webMethodAnnotation == null) {
| + if (isDBC() && methodComposite != null) {
| + webMethodAnnotation = methodComposite.getWebMethodAnnot();
| + } else if (!isDBC() && seiMethod != null) {
| + webMethodAnnotation = (WebMethod) getAnnotation(seiMethod, WebMethod.class);
| + } else {
| + if (log.isDebugEnabled()) {
| + log.debug("Unable to get WebMethod annotation");
| + }
| + }
| + }
| return webMethodAnnotation;
| }
|
| @@ -1565,11 +1576,9 @@
| // ANNOTATION: OneWay
| // ===========================================
| public Oneway getAnnoOneway() {
| - //TODO: Shouldn't really do it this way...if there is not Oneway annotation,
| - // we will always be calling the methods to try to retrieve it, since
| - // it will always be null, should consider relying on 'isOneWay'
| -
| if (onewayAnnotation == null) {
| + // Get the onew-way annotation from either the method composite (server-side)
| + // or from the SEI method (client-side).
| if (isDBC() && methodComposite != null) {
| if (methodComposite.isOneWay()) {
| onewayAnnotation = OneWayAnnot.createOneWayAnnotImpl();
|
|
|
| ---------------------------------------------------------------------
| To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
| For additional commands, e-mail: axis-cvs-help@ws.apache.org
|
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.5 (Cygwin)
iD8DBQFH7q/1gNg6eWEDv1kRAlcbAJ9ADbLQbo7PddwgbHbP5V+EqRuQLgCeIsNl
60LJrzl1yyTuKNjpFcnDxMM=
=GOa2
-----END PGP SIGNATURE-----
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-dev-help@ws.apache.org