Hi Andreas,

I applied your solution into codegen engine. It solves the original problem
and WSDL11ActionHelper#getWSAWActionExtensionAttribute method returns the
correct action (http://../..). But unfortunately this fix creates a separate
issue.

WSDL11ToAxisServiceBuilder#findPort method finds a SOAP port. There, it
checks whether the extensibility elements returned by
port.getExtensibilityElements() method is of SOAP 1.1, SOAP 1.2 or HTTP
type. But when I apply the above fix, it retuns ports of some unknown type
and generates an invalid code. And also it prints the following log on the
console.

"A SOAP port was not found - picking a random port!"

I'm attaching the patch here and you can apply it and check the above method
to reproduce the issue.

Thanks,
~Isuru

On Tue, Sep 28, 2010 at 5:58 PM, Isuru Suriarachchi <[email protected]>wrote:

>
>
> On Mon, Sep 27, 2010 at 9:48 PM, Andreas Veithen <
> [email protected]> wrote:
>
>> Isuru,
>>
>> Actually, the proper way of doing this is to configure an
>> ExtensionRegistry on the WSDLReader so that WSDL4J knows what is the
>> expected type for the wsas:Action attribute (otherwise it will try to
>> guess the attribute type, and this fails in this particular case).
>> Here is the code that should be added in the appropriate place in
>> Axis2 ("reader" is the WSDLReader instance):
>>
>> ExtensionRegistry extReg = new ExtensionRegistry();
>> extReg.registerExtensionAttributeType(Input.class, new
>> QName("http://www.w3.org/2006/05/addressing/wsdl";, "Action"),
>> AttributeExtensible.STRING_TYPE);
>> extReg.registerExtensionAttributeType(Output.class, new
>> QName("http://www.w3.org/2006/05/addressing/wsdl";, "Action"),
>> AttributeExtensible.STRING_TYPE);
>> reader.setExtensionRegistry(extReg);
>>
>> Can you do the necessary changes?
>>
>
> Sure. Will do the changes and update the list..
>
> Thanks,
> ~Isuru
>
>
>>
>> Andreas
>>
>> On Tue, Sep 7, 2010 at 13:36, Isuru Suriarachchi <[email protected]>
>> wrote:
>> > Attaching the wsdl and the schema..
>> >
>> > Thanks,
>> > ~Isuru
>> >
>> > On Tue, Sep 7, 2010 at 2:06 AM, Andreas Veithen <
>> [email protected]>
>> > wrote:
>> >>
>> >> Isuru,
>> >>
>> >> Can you send me a sample WSDL for which the problem occurs?
>> >>
>> >> Andreas
>> >>
>> >> On Mon, Sep 6, 2010 at 10:24, Isuru Suriarachchi <[email protected]>
>> >> wrote:
>> >> >
>> >> >
>> >> > On Sun, Sep 5, 2010 at 2:24 PM, Andreas Veithen
>> >> > <[email protected]>
>> >> > wrote:
>> >> >>
>> >> >> On Sun, Sep 5, 2010 at 05:12, Isuru Suriarachchi <[email protected]
>> >
>> >> >> wrote:
>> >> >> >
>> >> >> >
>> >> >> > On Sat, Sep 4, 2010 at 5:26 PM, Andreas Veithen
>> >> >> > <[email protected]>
>> >> >> > wrote:
>> >> >> >>
>> >> >> >> On Thu, Sep 2, 2010 at 08:39, Isuru Suriarachchi <
>> [email protected]>
>> >> >> >> wrote:
>> >> >> >> >
>> >> >> >> >
>> >> >> >> > On Thu, Sep 2, 2010 at 1:47 AM, Andreas Veithen
>> >> >> >> > <[email protected]>
>> >> >> >> > wrote:
>> >> >> >> >>
>> >> >> >> >> How can a namespace prefix conflict with a URI scheme? That
>> >> >> >> >> sounds
>> >> >> >> >> like a quick and dirty workaround for a more fundamental
>> issue.
>> >> >> >> >
>> >> >> >> > Let me explain it further.. I came up with a WSDL generated by
>> our
>> >> >> >> > AxisService2WSDL11 class which has the following wsaw:Action
>> for
>> >> >> >> > some
>> >> >> >> > message of some operation.
>> >> >> >> >
>> >> >> >> > wsaw:Action="http://www.webtest.org/echoStringMethodRequest";
>> >> >> >> >
>> >> >> >> > And also there is a namespace declaration in this WSDL as
>> >> >> >> > follows..
>> >> >> >> >
>> >> >> >> > xmlns:http="http://schemas.xmlsoap.org/wsdl/http/";
>> >> >> >> >
>> >> >> >> > When I generate the stub for this WSDL, it sets the Action on
>> the
>> >> >> >> > stub
>> >> >> >> > as
>> >> >> >> > follows..
>> >> >> >> >
>> >> >> >> >
>> >> >> >> >
>> >> >> >> >
>> >> >> >> > _operationClient.getOptions().setAction("//
>> www.webtest.org/echoStringMethodRequest");
>> >> >> >> >
>> >> >> >> > So this is due to the usage of "http" as a namespace prefix and
>> it
>> >> >> >> > has
>> >> >> >> > treated the http://.. URL as <prefix>:<localname>.
>> >> >> >>
>> >> >> >> The SOAP action is a URI, not a QName, so there is no reason why
>> the
>> >> >> >> code generator would interpret "http" as a prefix.
>> >> >> >
>> >> >> > Yes agreed..
>> >> >> >
>> >> >> >>
>> >> >> >> I think you should
>> >> >> >> try to determine why it is doing that instead of working around
>> the
>> >> >> >> issue by changing the WSDL generation code.
>> >> >> >
>> >> >> > I did have a look into the code generator code. There, wsdl4j
>> returns
>> >> >> > the
>> >> >> > action as a QName. That is why this issue occurs. Have a look at
>> the
>> >> >> > getWSAWActionExtensionAttribute(AttributeExtensible ae) method in
>> >> >> > WSDL11ActionHelper. Ideally it should provide a method to get the
>> >> >> > string
>> >> >> > value of the attribute. But currently there's no such method.
>> >> >>
>> >> >> Then I would suggest to review the following code in
>> >> >> WSDL11ActionHelper#getWSAWActionExtensionAttribute:
>> >> >>
>> >> >>        if (attribute instanceof QName) {
>> >> >>            QName qn = (QName) attribute;
>> >> >>            attribute = qn.getLocalPart();
>> >> >>        }
>> >> >>
>> >> >> The code is used only for the action attribute and we know that the
>> >> >> action is not a QName. Thus, instead of just taking the local part,
>> we
>> >> >> should rebuild the qualified name (prefix + ":" + localPart) to
>> >> >> reconstruct the original value of the attribute. WDYT?
>> >> >
>> >> > Actually I initially tried this as well. But as Amila has already
>> >> > pointed
>> >> > out, prefix is "" in this case.
>> >> >
>> >> >>
>> >> >> >>
>> >> >> >> > Thanks,
>> >> >> >> > ~Isuru
>> >> >> >> >
>> >> >> >> >>
>> >> >> >> >> Andreas
>> >> >> >> >>
>> >> >> >> >> On Wed, Sep 1, 2010 at 07:47,  <[email protected]> wrote:
>> >> >> >> >> > Author: isurues
>> >> >> >> >> > Date: Wed Sep  1 05:47:27 2010
>> >> >> >> >> > New Revision: 991441
>> >> >> >> >> >
>> >> >> >> >> > URL: http://svn.apache.org/viewvc?rev=991441&view=rev
>> >> >> >> >> > Log:
>> >> >> >> >> > changing the http prefix from http to http1. This is
>> because,
>> >> >> >> >> > use
>> >> >> >> >> > of
>> >> >> >> >> > http as a prefix causes conflicts with actual URLs like
>> >> >> >> >> > http://foo.com
>> >> >> >> >> >
>> >> >> >> >> > Modified:
>> >> >> >> >> >
>> >> >> >> >> >
>> >> >> >> >> >
>> >> >> >> >> >
>> >> >> >> >> >
>>  
>> axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/description/java2wsdl/Java2WSDLConstants.java
>> >> >> >> >> >
>> >> >> >> >> > Modified:
>> >> >> >> >> >
>> >> >> >> >> >
>> >> >> >> >> >
>> >> >> >> >> >
>> axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/description/java2wsdl/Java2WSDLConstants.java
>> >> >> >> >> > URL:
>> >> >> >> >> >
>> >> >> >> >> >
>> >> >> >> >> >
>> >> >> >> >> >
>> http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/description/java2wsdl/Java2WSDLConstants.java?rev=991441&r1=991440&r2=991441&view=diff
>> >> >> >> >> >
>> >> >> >> >> >
>> >> >> >> >> >
>> >> >> >> >> >
>> >> >> >> >> >
>> ==============================================================================
>> >> >> >> >> > ---
>> >> >> >> >> >
>> >> >> >> >> >
>> >> >> >> >> >
>> >> >> >> >> >
>> axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/description/java2wsdl/Java2WSDLConstants.java
>> >> >> >> >> > (original)
>> >> >> >> >> > +++
>> >> >> >> >> >
>> >> >> >> >> >
>> >> >> >> >> >
>> >> >> >> >> >
>> axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/description/java2wsdl/Java2WSDLConstants.java
>> >> >> >> >> > Wed Sep  1 05:47:27 2010
>> >> >> >> >> > @@ -45,7 +45,7 @@ public interface Java2WSDLConstants {
>> >> >> >> >> >
>> >> >> >> >> >     String HTTP_NAMESPACE =
>> >> >> >> >> > "http://schemas.xmlsoap.org/wsdl/http/";;
>> >> >> >> >> >     String MIME_NAMESPACE =
>> >> >> >> >> > "http://schemas.xmlsoap.org/wsdl/mime/";;
>> >> >> >> >> > -    String HTTP_PREFIX = "http";
>> >> >> >> >> > +    String HTTP_PREFIX = "http1";
>> >> >> >> >> >     String MIME_PREFIX = "mime";
>> >> >> >> >> >     String URN_PREFIX = "urn";
>> >> >> >> >> >     String COLON_SEPARATOR = ":";
>> >> >> >> >> >
>> >> >> >> >> >
>> >> >> >> >> >
>> >> >> >> >>
>> >> >> >> >>
>> >> >> >> >>
>> >> >> >> >>
>> ---------------------------------------------------------------------
>> >> >> >> >> To unsubscribe, e-mail: [email protected]
>> >> >> >> >> For additional commands, e-mail:
>> [email protected]
>> >> >> >> >>
>> >> >> >> >
>> >> >> >> >
>> >> >> >> >
>> >> >> >> > --
>> >> >> >> > Technical Lead,
>> >> >> >> > WSO2 Inc. http://wso2.org/
>> >> >> >> > Blog : http://isurues.wordpress.com/
>> >> >> >> >
>> >> >> >>
>> >> >> >>
>> >> >> >>
>> ---------------------------------------------------------------------
>> >> >> >> To unsubscribe, e-mail: [email protected]
>> >> >> >> For additional commands, e-mail: [email protected]
>> >> >> >>
>> >> >> >
>> >> >> >
>> >> >> >
>> >> >> > --
>> >> >> > Technical Lead,
>> >> >> > WSO2 Inc. http://wso2.org/
>> >> >> > Blog : http://isurues.wordpress.com/
>> >> >> >
>> >> >>
>> >> >>
>> ---------------------------------------------------------------------
>> >> >> To unsubscribe, e-mail: [email protected]
>> >> >> For additional commands, e-mail: [email protected]
>> >> >>
>> >> >
>> >> >
>> >> >
>> >> > --
>> >> > Technical Lead,
>> >> > WSO2 Inc. http://wso2.org/
>> >> > Blog : http://isurues.wordpress.com/
>> >> >
>> >>
>> >> ---------------------------------------------------------------------
>> >> To unsubscribe, e-mail: [email protected]
>> >> For additional commands, e-mail: [email protected]
>> >>
>> >
>> >
>> >
>> > --
>> > Technical Lead,
>> > WSO2 Inc. http://wso2.org/
>> > Blog : http://isurues.wordpress.com/
>> >
>> >
>> > ---------------------------------------------------------------------
>> > To unsubscribe, e-mail: [email protected]
>> > For additional commands, e-mail: [email protected]
>> >
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [email protected]
>> For additional commands, e-mail: [email protected]
>>
>>
>
>
> --
> Technical Lead,
> WSO2 Inc. http://wso2.org/
> Blog : http://isurues.wordpress.com/
>



-- 
Technical Lead,
WSO2 Inc. http://wso2.org/
Blog : http://isurues.wordpress.com/
Index: src/org/apache/axis2/wsdl/codegen/CodeGenerationEngine.java
===================================================================
--- src/org/apache/axis2/wsdl/codegen/CodeGenerationEngine.java (revision 
1002591)
+++ src/org/apache/axis2/wsdl/codegen/CodeGenerationEngine.java (working copy)
@@ -20,6 +20,7 @@
 package org.apache.axis2.wsdl.codegen;
 
 import org.apache.axis2.AxisFault;
+import org.apache.axis2.addressing.AddressingConstants;
 import org.apache.axis2.description.WSDL11ToAllAxisServicesBuilder;
 import org.apache.axis2.description.WSDL11ToAxisServiceBuilder;
 import org.apache.axis2.description.WSDL20ToAllAxisServicesBuilder;
@@ -37,6 +38,10 @@
 
 import javax.wsdl.Definition;
 import javax.wsdl.WSDLException;
+import javax.wsdl.Output;
+import javax.wsdl.Input;
+import javax.wsdl.extensions.AttributeExtensible;
+import javax.wsdl.extensions.ExtensionRegistry;
 import javax.wsdl.factory.WSDLFactory;
 import javax.wsdl.xml.WSDLReader;
 import javax.xml.namespace.QName;
@@ -285,6 +290,16 @@
 
         WSDLReader reader = WSDLFactory.newInstance().newWSDLReader();
         reader.setFeature("javax.wsdl.importDocuments", true);
+
+        ExtensionRegistry extReg = new ExtensionRegistry();
+        extReg.registerExtensionAttributeType(Input.class,
+                new QName(AddressingConstants.Final.WSAW_NAMESPACE, 
AddressingConstants.WSA_ACTION),
+                AttributeExtensible.STRING_TYPE);
+        extReg.registerExtensionAttributeType(Output.class,
+                new QName(AddressingConstants.Final.WSAW_NAMESPACE, 
AddressingConstants.WSA_ACTION),
+                AttributeExtensible.STRING_TYPE);
+        reader.setExtensionRegistry(extReg);
+
         return reader.readWSDL(uri);
         
     }
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to