Re: Can't generate a Java interface from a WSDL portType

2008-06-10 Thread Simon Nash

Scott Kurz wrote:

Simon,

The question is do we look at the definitions of the WSDL document
defining the imported portType
or the definitions of the document defining a WSDL service in terms of the
imported portType  (since the TNS
of each are different).

I haven't read all of JAX-WS either but agree that the CXF behavior makes
more sense.

If you consider the question which definitions? it seems you'd naturally
pick the one in which
the portType is actually DEFINED as opposed to merely IMPORTED


From what I can see the WSDL spec doesn't say anything particular about the

import behavior either.

On the one hand this isn't too critical since, with either choice, we
generate a just-as-legal
@WebService(targetNamespace)
into the Java to capture the original TNS.


Doesn't this raise the same question?  The @WebService annotation
for the generated Java interface should have the targetNamespace
of the portType.  It seems an extremely reasonable assumption
that this is the same targetNamespace of the portType (whatever
that means) that will be used to derive the package name.

I tried this with the Sun RI and was surprised that it took the
targetNamespace for the @WebService annotation from the portType's
wsdl:definitions, even though it took the targetNamespace for
the package name from the service's wsdl:definitions.

This inconsistency seems wrong to me.  My conclusion is that
CXF has got this right.


On the other hand, JAX-WS could have been clearer on this...


I agree.  And this seems like a warning that in cases where the
spec is ambiguous, we should not assume that we can use the
Sun RI's behaviour to determine which interpretation is correct.

  Simon






On Mon, Jun 9, 2008 at 4:45 AM, Simon Nash [EMAIL PROTECTED] wrote:


Jean-Sebastien Delfino wrote:


Scott Kurz wrote:


Sebastien, I'm surprised the package names would be different.What is
the namespace you're using that isn't mapping to the same package in each
tool?
Just curious...



My app is an order processing app with the following:

WSDL service namespace:
http://sample/Order/Binding

WSDL Order portType namespace:
http://sample/Order

The CXF tool generates interface sample.order.Order
The JAXWS RI tool generates interface sample.order.binding.Order

I gave the same WSDL file (containing the WSDL service) to both tools.

One could argue that both are correct vs the JAX-WS spec as they generate
a correct package name from the namespace of 'the' WSDL definition, but the
funny thing is that they do not pick the same WSDL definition... JAXWS-RI
picks the input definition given to the tool and CXF the definition that
actually contains the portType... and the JAXWS spec doesn't seem to state
which one should be picked (at least I couldn't find it).

IMHO the CXF behavior is better, but I've not read all 150 pages of the
JAX-WS spec so I may be missing something :)



From section 2.2 of the JAX-WS spec:

 A wsdl:portType element is mapped to a Java interface in the package
 mapped from the wsdl:definitions element (see section 2.1 for a
 description of wsdl:definitions mapping).

Section 2.1 says:

 A wsdl:definitions element and its associated targetNamespace
 attribute is mapped to a Java package. JAXB[10] (see appendix D)
 defines a standard mapping from a namespace URI to a Java package
 name. By default, this algorithm is used to map the value of a
 wsdl:definitions element's targetNamespace attribute to a Java
 package name.

 } Conformance (Definitions mapping): In the absence of customizations,
 the Java package name is mapped from the value of a wsdl:definitions
 element's targetNamespace attribute using the algorithm defined by
 JAXB[10].

So IMO the Java package name that's used to map the portType should
be derived from the targetNamespace of the wsdl:definitions element.
What was this targetNamespace?

 Simon








Re: Can't generate a Java interface from a WSDL portType

2008-06-10 Thread Mike Edwards

Folks,

I tend to agree with Simon, that the package name would rightly be derived from the target namespace 
 of the wsdl:definitions/ containing the portType definition, since it's the port type that 
defines the interface.


So +1 to the CXF interpretation.

On the other hand, there is a JAX-WS TCK.  Does it test this piece of function 
I wonder...?


Yours, Mike.

Simon Nash wrote:

Scott Kurz wrote:

Simon,

The question is do we look at the definitions of the WSDL document
defining the imported portType
or the definitions of the document defining a WSDL service in terms 
of the

imported portType  (since the TNS
of each are different).

I haven't read all of JAX-WS either but agree that the CXF behavior makes
more sense.

If you consider the question which definitions? it seems you'd 
naturally

pick the one in which
the portType is actually DEFINED as opposed to merely IMPORTED

From what I can see the WSDL spec doesn't say anything particular 
about the

import behavior either.

On the one hand this isn't too critical since, with either choice, we
generate a just-as-legal
@WebService(targetNamespace)
into the Java to capture the original TNS.


Doesn't this raise the same question?  The @WebService annotation
for the generated Java interface should have the targetNamespace
of the portType.  It seems an extremely reasonable assumption
that this is the same targetNamespace of the portType (whatever
that means) that will be used to derive the package name.

I tried this with the Sun RI and was surprised that it took the
targetNamespace for the @WebService annotation from the portType's
wsdl:definitions, even though it took the targetNamespace for
the package name from the service's wsdl:definitions.

This inconsistency seems wrong to me.  My conclusion is that
CXF has got this right.


On the other hand, JAX-WS could have been clearer on this...


I agree.  And this seems like a warning that in cases where the
spec is ambiguous, we should not assume that we can use the
Sun RI's behaviour to determine which interpretation is correct.

  Simon






On Mon, Jun 9, 2008 at 4:45 AM, Simon Nash [EMAIL PROTECTED] wrote:


Jean-Sebastien Delfino wrote:


Scott Kurz wrote:

Sebastien, I'm surprised the package names would be different.
What is
the namespace you're using that isn't mapping to the same package 
in each

tool?
Just curious...



My app is an order processing app with the following:

WSDL service namespace:
http://sample/Order/Binding

WSDL Order portType namespace:
http://sample/Order

The CXF tool generates interface sample.order.Order
The JAXWS RI tool generates interface sample.order.binding.Order

I gave the same WSDL file (containing the WSDL service) to both tools.

One could argue that both are correct vs the JAX-WS spec as they 
generate
a correct package name from the namespace of 'the' WSDL definition, 
but the
funny thing is that they do not pick the same WSDL definition... 
JAXWS-RI
picks the input definition given to the tool and CXF the definition 
that
actually contains the portType... and the JAXWS spec doesn't seem to 
state

which one should be picked (at least I couldn't find it).

IMHO the CXF behavior is better, but I've not read all 150 pages of the
JAX-WS spec so I may be missing something :)



From section 2.2 of the JAX-WS spec:

 A wsdl:portType element is mapped to a Java interface in the package
 mapped from the wsdl:definitions element (see section 2.1 for a
 description of wsdl:definitions mapping).

Section 2.1 says:

 A wsdl:definitions element and its associated targetNamespace
 attribute is mapped to a Java package. JAXB[10] (see appendix D)
 defines a standard mapping from a namespace URI to a Java package
 name. By default, this algorithm is used to map the value of a
 wsdl:definitions element's targetNamespace attribute to a Java
 package name.

 } Conformance (Definitions mapping): In the absence of customizations,
 the Java package name is mapped from the value of a wsdl:definitions
 element's targetNamespace attribute using the algorithm defined by
 JAXB[10].

So IMO the Java package name that's used to map the portType should
be derived from the targetNamespace of the wsdl:definitions element.
What was this targetNamespace?

 Simon











Re: Can't generate a Java interface from a WSDL portType

2008-06-10 Thread Scott Kurz
On Tue, Jun 10, 2008 at 4:59 AM, Simon Nash [EMAIL PROTECTED] wrote:


 I tried this with the Sun RI and was surprised that it took the
 targetNamespace for the @WebService annotation from the portType's
 wsdl:definitions, even though it took the targetNamespace for
 the package name from the service's wsdl:definitions.

 This inconsistency seems wrong to me.  My conclusion is that
 CXF has got this right.


That's interesting.  Seems like wsimport might have a bug then if they're
not in synch with
themselves.  (And sorry my earlier comment here was meaningless.)



  On the other hand, JAX-WS could have been clearer on this...

  I agree.  And this seems like a warning that in cases where the
 spec is ambiguous, we should not assume that we can use the
 Sun RI's behaviour to determine which interpretation is correct.

  Simon


Good point.

Scott


Re: Can't generate a Java interface from a WSDL portType

2008-06-09 Thread Simon Nash

Jean-Sebastien Delfino wrote:

Scott Kurz wrote:

Sebastien, I'm surprised the package names would be different.What is
the namespace you're using that isn't mapping to the same package in each
tool?
Just curious...



My app is an order processing app with the following:

WSDL service namespace:
http://sample/Order/Binding

WSDL Order portType namespace:
http://sample/Order

The CXF tool generates interface sample.order.Order
The JAXWS RI tool generates interface sample.order.binding.Order

I gave the same WSDL file (containing the WSDL service) to both tools.

One could argue that both are correct vs the JAX-WS spec as they 
generate a correct package name from the namespace of 'the' WSDL 
definition, but the funny thing is that they do not pick the same WSDL 
definition... JAXWS-RI picks the input definition given to the tool and 
CXF the definition that actually contains the portType... and the JAXWS 
spec doesn't seem to state which one should be picked (at least I 
couldn't find it).


IMHO the CXF behavior is better, but I've not read all 150 pages of the 
JAX-WS spec so I may be missing something :)


From section 2.2 of the JAX-WS spec:

 A wsdl:portType element is mapped to a Java interface in the package
 mapped from the wsdl:definitions element (see section 2.1 for a
 description of wsdl:definitions mapping).

Section 2.1 says:

 A wsdl:definitions element and its associated targetNamespace
 attribute is mapped to a Java package. JAXB[10] (see appendix D)
 defines a standard mapping from a namespace URI to a Java package
 name. By default, this algorithm is used to map the value of a
 wsdl:definitions element’s targetNamespace attribute to a Java
 package name.

 } Conformance (Definitions mapping): In the absence of customizations,
 the Java package name is mapped from the value of a wsdl:definitions
 element’s targetNamespace attribute using the algorithm defined by
 JAXB[10].

So IMO the Java package name that's used to map the portType should
be derived from the targetNamespace of the wsdl:definitions element.
What was this targetNamespace?

  Simon



Re: Can't generate a Java interface from a WSDL portType

2008-06-09 Thread Jean-Sebastien Delfino

Simon Nash wrote:

Jean-Sebastien Delfino wrote:

Scott Kurz wrote:
Sebastien, I'm surprised the package names would be different.
What is
the namespace you're using that isn't mapping to the same package in 
each

tool?
Just curious...



My app is an order processing app with the following:

WSDL service namespace:
http://sample/Order/Binding

WSDL Order portType namespace:
http://sample/Order

The CXF tool generates interface sample.order.Order
The JAXWS RI tool generates interface sample.order.binding.Order

I gave the same WSDL file (containing the WSDL service) to both tools.

One could argue that both are correct vs the JAX-WS spec as they 
generate a correct package name from the namespace of 'the' WSDL 
definition, but the funny thing is that they do not pick the same WSDL 
definition... JAXWS-RI picks the input definition given to the tool 
and CXF the definition that actually contains the portType... and the 
JAXWS spec doesn't seem to state which one should be picked (at least 
I couldn't find it).


IMHO the CXF behavior is better, but I've not read all 150 pages of 
the JAX-WS spec so I may be missing something :)

 
 From section 2.2 of the JAX-WS spec:

 A wsdl:portType element is mapped to a Java interface in the package
 mapped from the wsdl:definitions element (see section 2.1 for a
 description of wsdl:definitions mapping).

Section 2.1 says:

 A wsdl:definitions element and its associated targetNamespace
 attribute is mapped to a Java package. JAXB[10] (see appendix D)
 defines a standard mapping from a namespace URI to a Java package
 name. By default, this algorithm is used to map the value of a
 wsdl:definitions element’s targetNamespace attribute to a Java
 package name.

 } Conformance (Definitions mapping): In the absence of customizations,
 the Java package name is mapped from the value of a wsdl:definitions
 element’s targetNamespace attribute using the algorithm defined by
 JAXB[10].


Yeah I read that too. Again, both implementations comply with that text 
but pick different definitions. That's all.



So IMO the Java package name that's used to map the portType should
be derived from the targetNamespace of the wsdl:definitions element.
What was this targetNamespace?


See above: http://sample/Order




  Simon



--
Jean-Sebastien


Re: Can't generate a Java interface from a WSDL portType

2008-06-04 Thread Scott Kurz
The Apache CXF tool issues a warning but still gens Java w/ JAXB
databindings from a portType WSDL.



On Wed, Jun 4, 2008 at 5:00 PM, Jean-Sebastien Delfino [EMAIL PROTECTED]
wrote:

 SCA allows you to define service interfaces using either WSDL or Java (and
 potentially other languages too). The SCA Java API and Annotations  spec
 v1.0 says (section 1.9) says that the JAX-WS WSDL to Java mapping rules are
 used to generate Java interfaces from WSDL.

 I have a WSDL file describing my interface using a portType and I've been
 trying the JAXWS wsimport Maven tool for about an hour now with no luck.
 Looks like wsimport requires a WSDL service, which I don't have, and don't
 want to have to write in my WSDL (it wouldn't make much sense to have it on
 an interface anyway).

 Is Tuscany providing a WSDL interface/portType to Java generation tool?

 Is anybody out there using WSDL and Java interfaces? Any luck? What JAX-WS
 compliant tool are you using to generate your Java interfaces?
 --
 Jean-Sebastien



Re: Can't generate a Java interface from a WSDL portType

2008-06-04 Thread Jean-Sebastien Delfino

Raymond Feng wrote:

Hi,

I got the CXF code-gen plugin 2.1 working after debugging the plugin 
source code :-(.


Here is the pom.xml snippt I figured out. Please note I had to override 
wsdlRoot/testWsdlRoot to be a non-existing file to avoid NPE (I assume 
it's CXF bug if the wsdl files are in src/test/resources/wsdl).




...

That worked for me too. The generated output is slightly different from 
the JAXWS RI wsimport (different package name for the generated 
interface for example) but it looks OK.


Thanks!
--
Jean-Sebastien


Re: Can't generate a Java interface from a WSDL portType

2008-06-04 Thread Scott Kurz
Sebastien, I'm surprised the package names would be different.What is
the namespace you're using that isn't mapping to the same package in each
tool?
Just curious...


On Wed, Jun 4, 2008 at 7:25 PM, Jean-Sebastien Delfino [EMAIL PROTECTED]
wrote:

 Raymond Feng wrote:

 Hi,

 I got the CXF code-gen plugin 2.1 working after debugging the plugin
 source code :-(.

 Here is the pom.xml snippt I figured out. Please note I had to override
 wsdlRoot/testWsdlRoot to be a non-existing file to avoid NPE (I assume it's
 CXF bug if the wsdl files are in src/test/resources/wsdl).


 ...

 That worked for me too. The generated output is slightly different from the
 JAXWS RI wsimport (different package name for the generated interface for
 example) but it looks OK.

 Thanks!
 --
 Jean-Sebastien