dev@jax-ws.java.net

Re: Invoking a .NET web service using JAX-WS 2.0

From: Vivek Pandey <Vivek.Pandey_at_Sun.COM>
Date: Tue, 22 Aug 2006 09:28:21 -0700

Ryan LeCompte wrote:
> Hi Vivek,
>
> Yes, this is a one-way operation. Here is a complete example schema
> that illustrates the problem:
>
As far as nothing happening on the client side is understandable as its
one-way and so there is no return value. I guess the problem you're
facing is that the .NET endpoint's one-way operation is not invoked, is
this right?

-vivek.
> <?xml version="1.0" encoding="UTF-8"?>
> <!--
> Example WSDL.
> -->
> <wsdl:definitions name="Example"
> targetNamespace="http://www.company.com/services/Example"
> xmlns:tns="http://www.company.com/services/Example"
> xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
> xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
> xmlns:xsd="http://www.w3.org/2001/XMLSchema">
>
> <wsdl:types>
> <xsd:schema
> targetNamespace="http://www.company.com/services/Example"
> xmlns:tns="http://www.company.com/services/Example">
> <xsd:complexType name="Base" abstract="true">
> <xsd:sequence>
> <xsd:element name="attributeOne" type="xsd:int"
> minOccurs="1" maxOccurs="1"/>
> </xsd:sequence>
> </xsd:complexType>
> <xsd:complexType name="SubOne">
> <xsd:complexContent>
> <xsd:extension base="tns:Base">
> <xsd:sequence>
> <xsd:element name="attributeTwo" type="xsd:int"
> minOccurs="1" maxOccurs="1"/>
> </xsd:sequence>
> </xsd:extension>
> </xsd:complexContent>
> </xsd:complexType>
> <xsd:complexType name="SubTwo">
> <xsd:complexContent>
> <xsd:extension base="tns:Base">
> <xsd:sequence>
> <xsd:element name="attributeThree" type="xsd:int"
> minOccurs="1" maxOccurs="1"/>
> </xsd:sequence>
> </xsd:extension>
> </xsd:complexContent>
>
> </xsd:complexType>
>
> <xsd:complexType name="fooRequest">
> <xsd:sequence>
> <xsd:element name="values" type="tns:Base"
> minOccurs="1" maxOccurs="unbounded"/>
> </xsd:sequence>
>
> </xsd:complexType>
>
> <xsd:element name="foo"
> type="tns:fooRequest"/>
> </xsd:schema>
> </wsdl:types>
> <wsdl:message name="Example_fooRequest">
> <wsdl:part name="parameters" element="tns:foo"/>
> </wsdl:message>
> <wsdl:portType name="ExamplePortType">
> <wsdl:operation name="foo">
> <wsdl:input message="tns:Example_fooRequest"/>
> </wsdl:operation>
> </wsdl:portType>
>
> <wsdl:binding name="ExampleBinding" type="tns:ExamplePortType">
> <soap:binding transport="http://schemas.xmlsoap.org/soap/http"
> style="document"/>
> <wsdl:operation name="foo">
> <soap:operation soapAction="Example/foo"/>
> <wsdl:input>
> <soap:body use="literal"/>
> </wsdl:input>
> </wsdl:operation>
> </wsdl:binding>
> <wsdl:service name="Example">
> <wsdl:port name="ExamplePort" binding="tns:ExampleBinding">
> <soap:address location="REPLACE_WITH_ACTUAL_URL"/>
> </wsdl:port>
> </wsdl:service>
> </wsdl:definitions>
>
> ------------------------------------------------------------------------
> *From:* Vivek Pandey [mailto:Vivek.Pandey_at_Sun.COM]
> *Sent:* Tue 8/22/2006 10:59 AM
> *To:* users_at_jax-ws.dev.java.net
> *Cc:* dev_at_jax-ws.dev.java.net
> *Subject:* Re: Invoking a .NET web service using JAX-WS 2.0
>
> Hi Ryan,
>
> Looking at the schema types its not obvious what might be going on at
> .NET side. Is it possible that this operation is one-way? A complete
> WSDL and schema will help see whats going on.
>
> thnaks,
>
> -vivek.
> Ryan LeCompte wrote:
> > Sorry, just one more thing. I should also mention that I was able to
> > successfully invoke the same problematic operation on an endpoint that
> > was built using JWSDP 1.6. So this really seems to be a .NET specific
> > issue.
> >
> > Thanks!
> >
> > Ryan
> >
> > ------------------------------------------------------------------------
> > *From:* Ryan LeCompte
> > *Sent:* Tue 8/22/2006 10:24 AM
> > *To:* users_at_jax-ws.dev.java.net
> > *Cc:* dev_at_jax-ws.dev.java.net
> > *Subject:* RE: Re: Invoking a .NET web service using JAX-WS 2.0
> >
> > Okay, I have some more information from further testing this morning.
> > I actually used Netbeans 5.5. to auto-generate a web service client
> > from the auto-generated .NET WSDL file
> > (http://service/service.asmx?WSDL), and I tried invoking various
> > methods on it. I was able to invoke one method on the .NET web service
> > and get a response (which I could do previously), HOWEVER I'm not able
> > to invoke another operation which looks like the following:
> >
> > handle(Type)
> >
> > Where in the WSDL, there are sub-types of Type, such as TypeA, and
> > TypeB. I'm actually invoking the service with the JAX-WS client as
> > handle(TypeA), however I'm not seeing that operation get invoked on
> > the .NET side of the communication. THere are no exceptions/errors
> > generated on the JAX-WS 2.0 side, either. Does this mean that JAX-WS
> > has problems invoking .NET web services where the complex types are
> > polymorphic? JWSDP 1.5/1.6 handled this exact same scenario without
> > any trouble. Note that my custom WSDL hasn't changed from when I had
> > it working on JWSDP and now trying with JAX-WS.
> >
> > To be more concrete, here's a WSDL snippet that demonstrates:
> >
> > <xsd:complexType name="Base" abstract="true">
> > <xsd:sequence>
> > <xsd:element name="someAttribute" type="xsd:int"
> > minOccurs="1" maxOccurs="1"/>
> > </xsd:sequence>
> > </xsd:complexType>
> > <xsd:complexType name="SubA">
> > <xsd:complexContent>
> > <xsd:extension base="tns:Base">
> > <xsd:sequence>
> > <xsd:element name="someOtherAttribute"
> > type="xsd:string" minOccurs="1"
> > maxOccurs="1"/>
> > </xsd:sequence>
> > </xsd:extension>
> > </xsd:complexContent>
> > </xsd:complexType>
> > <xsd:complexType name="SubB">
> > <xsd:complexContent>
> > <xsd:extension base="tns:Base">
> > <xsd:sequence>
> > <xsd:element name="otherAttribute"
> > type="xsd:string" minOccurs="0" maxOccurs="1"/>
> > </xsd:sequence>
> > </xsd:extension>
> > </xsd:complexContent>
> >
> >
> </xsd:complexType>
> >
> > <xsd:complexType name="operationRequest">
> > <xsd:sequence>
> > <xsd:element name="values" type="tns:Base"
> > minOccurs="1" maxOccurs="unbounded"/>
> > </xsd:sequence>
> > </xsd:complexType>
> >
> > It would be nice to hear if someone else can reproduce this problem,
> > or provide a suggestion?
> >
> > Thanks!
> >
> > Ryan
> > ------------------------------------------------------------------------
> > *From:* Ryan LeCompte
> > *Sent:* Mon 8/21/2006 8:07 PM
> > *To:* users_at_jax-ws.dev.java.net; users_at_jax-ws.dev.java.net
> > *Subject:* RE: Re: Invoking a .NET web service using JAX-WS 2.0
> >
> > Hi Rick,
> >
> > Thanks for the suggestions. In the past, my approach to web services
> > has always been to hand-write a WSDL describing the service, and then
> > feed this same WSDL into both JWSDP and .NET. This has worked superbly
> > over the past couple of years. Even though .NET generated its own
> > WSDL, the JWSDP (1.6) had no problems communicating with the service.
> > I'm going to investigate this further tomorrow, but I'm not sure why
> > JAX-WS 2.0 used in the same manner would have any trouble.
> >
> > Ryan
> >
> > ------------------------------------------------------------------------
> > *From:* Rick Jones [mailto:rick_at_activeservice.co.uk]
> > *Sent:* Mon 8/21/2006 6:06 PM
> > *To:* users_at_jax-ws.dev.java.net
> > *Subject:* Re: Invoking a .NET web service using JAX-WS 2.0
> >
> > My suggestion would be to feed the WSDL generated by .Net into
> wsimport to
> > generate the client stub code. That way you should guarantee an exact
> > match. It's the only technique I've ever used to call .Net services,
> and I
> > haven't run into any problems.
> >
> > That said I haven't got very far with JAX-WS 2 clients because of
> > completely unrelated problems getting it to run in my target
> > environment (a
> > configurable applet) where 1.x ran fine, so maybe there are gotchas
> that I
> > haven't hit yet :-/
> >
> > HTH
> >
> > Rick Jones
> >
> > --On 21 August 2006 16:40 -0400 Ryan LeCompte
> > <Ryan.LeCompte_at_pangonetworks.com> wrote:
> >
> > ¦ I just finished converting one of my web services from JWSDP 1.6 to
> > ¦ JAX-WS 2.0, and I'm running into a bit of a problem. The actual
> service
> > ¦ implementation is written in .NET, and the client is written using
> > ¦ JAX-WS 2.0. The same client used to work fine with JWSDP 1.6, however
> > ¦ I'm not seeing service operations go through with JAX-WS 2.0. My
> > ¦ question is:
> > ¦
> > ¦ I know that JAX-WS 2.0 now accesses the WSDL remotely to determine
> which
> > ¦ operations should be invoked (e.g.,
> http://service/myservice.asmx?wsdl).
> > ¦ By default, the .NET runtime auto-generates the WSDL at runtime
> when you
> > ¦ use the ?wsdl extension in the URL. Could this be causing a
> problem? The
> > ¦ interesting thing is that I don't see any errors on the Java side, and
> > ¦ no errors in the log file on the .NET side. The data types
> involved are
> > ¦ also polymorphic in nature (base type, sub-type, etc). This used
> to work
> > ¦ fine in JWSDP 1.6. The only problem I can see is that the WSDL used to
> > ¦ generated the client (in JAX-WS) is (slightly) different from the
> > ¦ auto-generated WSDL when accessed as
> http://service/myservice.asmx?wsdl.
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: users-unsubscribe_at_jax-ws.dev.java.net
> > For additional commands, e-mail: users-help_at_jax-ws.dev.java.net
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe_at_jax-ws.dev.java.net
> For additional commands, e-mail: dev-help_at_jax-ws.dev.java.net
>