Can you add localName attributes to those?
@RequestWrapper(localName="myBarMethod",
targetNamespace="http://com.bar")
@ResponseWrapper(localName="myBarMethodResponse"
targetNamespace="http://com.bar")
And seeing if that helps. If so, try removing them and then adding the name
attribute to the @WebMethod.
Looking at the code, I think it needs to have one of those defined, but I'd
like to verify that.
Dan
On Thursday, July 21, 2011 4:41:03 PM Algirdas Veitas wrote:
> Hi Daniel,
>
> In doing a bit more experimentation, it looks like the "issue" manifests
> itself even if you are not extending an interface. The following service
> interface, results in the same issue:
>
> package com;
> @WebService
> public interface UberService
> {
> @WebMethod
> @RequestWrapper(targetNamespace="http://com.bar")
> @ResponseWrapper(targetNamespace="http://com.bar")
> String myBarMethod(String x);
> }
>
> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="
> http://com/" elementFormDefault="unqualified" targetNamespace="http://com/"
> version="1.0">
> <xs:element name="myBarMethod" type="tns:myBarMethod"/>
> <xs:element name="myBarMethodResponse" type="tns:myBarMethodResponse"/>
> <xs:complexType name="myBarMethod">
> <xs:sequence>
> <xs:element minOccurs="0" name="arg0" type="xs:string"/>
> </xs:sequence>
> </xs:complexType>
> <xs:complexType name="myBarMethodResponse">
> <xs:sequence>
> <xs:element minOccurs="0" name="return" type="xs:string"/>
> </xs:sequence>
> </xs:complexType>
> </xs:schema>
>
> Thanks,
> Al
>
> On Thu, Jul 21, 2011 at 3:59 PM, Algirdas Veitas <[email protected]> wrote:
> > Hi Daniel,
> >
> > Thanks for the response. I added the @RequestWrapper/@ResponseWrapper
> > as
> > recommended, but the outcome is the same: the wrapper's are not being
> > put
> > into the proper namespace :(
> >
> > Here are the updated Java interfaces:
> >
> >
> > @WebService(targetNamespace="http://com.foo")
> > public interface FooService {
> >
> > @WebMethod
> > @RequestWrapper(targetNamespace="http://com.foo")
> > @ResponseWrapper(targetNamespace="http://com.foo")
> >
> > @WebResult(targetNamespace="http://com.foo")
> > String myFooMethod(String x);
> >
> > }
> >
> > @WebService(targetNamespace="http://com.bar")
> > public interface BarService {
> >
> > @WebMethod
> > @RequestWrapper(targetNamespace="http://com.bar")
> > @ResponseWrapper(targetNamespace="http://com.bar")
> >
> > @WebResult(targetNamespace="http://com.bar")
> > String myBarMethod(String x);
> >
> > }
> >
> > Thanks,
> > Al
> >
> > On Thu, Jul 21, 2011 at 3:39 PM, Daniel Kulp <[email protected]> wrote:
> >> You may need to also add @RequestWrapper/@ResponseWrapper annotations
> >> to
> >> the
> >> methods to define the namespaces used for the generated wrappers.
> >> The
> >> @WebResult/@WebParam annotations define them for the elements IN the
> >> request/response wrapper sequences (for example, you see the line:
> >>
> >> <xs:element minOccurs="0" ref="ns2:return"/>
> >>
> >> to refer to the element in a different namespace). The other
> >> annotations
> >> would generate the appropriate wrapper elements in their appropriate
> >> namespace.
> >>
> >> Dan
> >>
> >> On Thursday, July 21, 2011 10:30:03 AM Algirdas Veitas wrote:
> >> > Hi,
> >> >
> >> > Am hoping someone can give me a hand with a potential issue (or a
> >> > misunderstanding on my part) with java2ws with respect to the
> >> > target
> >> > namespaces being generated for the operation message types.
> >> >
> >> > Some background: We have a requirement to move roughly 15 web
> >> > services
> >>
> >> from
> >>
> >> > "Code-First" to "Contract-First". In addition, we now need to
> >> > collapse these 15 web services into 1 big WSDL (not my choice).
> >> > To date we have
> >>
> >> been
> >>
> >> > using java2ws via the cxf-java2ws-plugin (2.3.1) to generate the
> >> > WSDL
> >>
> >> for
> >>
> >> > each of our services.
> >> >
> >> > Now, to boil this (potential) issue (or misunderstanding) down to
> >> > a
> >>
> >> small
> >>
> >> > size, let say we have 2 existing Web Services and that we need
> >> > collapse
> >>
> >> into
> >>
> >> > 1 WSDL and then move away from Code-First. Here are there
> >> > definitions:
> >> >
> >> > package com.foo;
> >> > @WebService(targetNamespace="http://com.foo")
> >> > public interface FooService {
> >> >
> >> > @WebMethod
> >> > @WebResult(targetNamespace="http://com.foo")
> >> > String myFooMethod(String x);
> >> >
> >> > }
> >> >
> >> > package com.bar;
> >> > @WebService(targetNamespace="http://com.bar")
> >> > public interface BarService {
> >> >
> >> > @WebMethod
> >> > @WebResult(targetNamespace="http://com.bar")
> >> > String myBarMethod(String x);
> >> >
> >> > }
> >> >
> >> > After running java2ws on these 2 services, we see that the
> >>
> >> targetNamespace
> >>
> >> > for elements and complexTypes "myBarMethod" and "myBarResponse"
> >> > are "
> >> > http://com.bar", which is expected (some attributes and other
> >> > elements
> >> > removed for clarity):
> >> >
> >> > <xs:schema xmlns:tns="http://com.bar"
> >> > targetNamespace="http://com.bar"
> >> > version="1.0">
> >> > <xs:element name="myBarMethod" type="tns:myBarMethod"/>
> >> > <xs:element name="myBarMethodResponse"
> >> > type="tns:myBarMethodResponse"/> <xs:complexType
> >> > name="myBarMethod">
> >> >
> >> > <xs:sequence>
> >> >
> >> > <xs:element minOccurs="0" name="arg0"
> >> > type="xs:string"/>
> >> >
> >> > </xs:sequence>
> >> >
> >> > </xs:complexType>
> >> >
> >> > </xs:schema>
> >> >
> >> >
> >> > Now, our solution to merge all of these services into one WSDL was
> >> > to
> >> > initially generate the WSDL using java2ws and then migrate our
> >> > infrastructure away from java2ws to start using wsdl2java. The
> >>
> >> following
> >>
> >> > solution seemed to be the most efficient to get us there. We
> >> > would
> >> > basically create a temporary UberService interface that extended
> >>
> >> FooService
> >>
> >> > and BarService like so to generate the 1 big WSDL
> >> >
> >> > package com;
> >> > @WebService
> >> > public interface UberService
> >> >
> >> > extends FooService , BarService {
> >> >
> >> > }
> >> >
> >> > We then process UberService via java2ws and a UberService.wsdl is
> >>
> >> generated
> >>
> >> > and all methods from each service are merged into one WSDL,
> >> > exactly what
> >>
> >> we
> >>
> >> > wanted. However, we did notice that element/complexType
> >> > "myBarMethod" , "myBarMethodResponse" , "myFooMethod" and
> >> > "myFooMethodResponse" are now
> >>
> >> in
> >>
> >> > the "http://com" namespace instead of the expected http://com.bar
> >> > and
> >> > http://com.foo namespaces respectively
> >> >
> >> > The 3 WSDL's are attached....
> >> >
> >> > It seems like java2ws in this situation (processing an interface
> >> > that
> >> > extends other interfaces annotated with @WebService) is ignoring
> >> > the
> >> > targetNamespace that is defined for both FooService and
> >> > BarService.
> >>
> >> There
> >>
> >> > may be a good reason for doing this (specifications, etc) but am
> >> > not
> >>
> >> sure if
> >>
> >> > it is a bug or a feature or PEBKAC :)
> >> >
> >> > Anyone have any thoughts?
> >> >
> >> > Al
> >>
> >> --
> >> Daniel Kulp
> >> [email protected]
> >> http://dankulp.com/blog
> >> Talend - http://www.talend.com
--
Daniel Kulp
[email protected]
http://dankulp.com/blog
Talend - http://www.talend.com