1 Reply Latest reply on Jun 8, 2010 9:14 AM by Russell Ritenour

    JBOSSWS creates WSDL incompatible with JDK Endpoint class and .Net Clients

    Russell Ritenour Newbie

      I'm using jboss 6.0 with jbossws 3.3.0 (beta2). 
      I'm creating web services using JAXWS and testing them against java, c#, SOAPUI, and perl clients.  
      I'm also using the Endpoint class from the JDK as a verification step. 


      When I annotate the web service class as follows:


      //@SOAPBinding(style = SOAPBinding.Style.RPC) // works with .Net/C# + JBOSS
      @SOAPBinding(style=SOAPBinding.Style.DOCUMENT, parameterStyle=SOAPBinding.ParameterStyle.WRAPPED, use=Use.LITERAL)
      public class ConfigEndpoint implements ConfigSvcIF {


      ... stuff deleted ...



      I also created the following class...

      import javax.xml.ws.Endpoint;


      public final class ConfigService {
          public static void main(String[] args) {
              Endpoint.publish("http://localhost:8000/cfg", new ConfigEndpoint());






      I get the following behavior...


      The WSDL generated by the reference implementation (the Endpoint class) works fine with all clients.  However, the WSDL generated by JBOSSWS
      won't work with the .Net client (SOAPUI and perl both still work).

      When I change the binding style to RPC, all the clients work using the JBOSSWS generated wsdl.


      So the question...   What can I do in the code (and/or) the configuration of JBOSSWS so that it generates a WSDL compatible with the reference implementation or, barring that, a WSDL that can be consumed by all clients?  While I can concede that the wsdl.exe may be "broken" it does work with the ConfigService class so my suspicion is the my jbossws installation is incorrectly configured.


      Thank you in advance 

        • 1. Re: JBOSSWS creates WSDL incompatible with JDK Endpoint class and .Net Clients
          Russell Ritenour Newbie

          <warning type="editorial">

          Well, this is a first.  Three weeks without a single comment (even one to tell me I shouldn't do it this way).



          I installed the jboss-6.0.0-20100429-M3 version with no change in behavior.


          Upon further investigation, I discovered that the message part name attribute (//message/part[@name]) is different between the Endpoint RI and the JBOSS generated WSDL.  If I modify the WSDL from JBOSS by changing the name="..." to name="parameters", the .NET client works fine.



          /cygdrive/c/foo/jbossws/mod-wsdl> diff cfg.wsdl cfg.wsdl.orig
          <   <part element="tns:createConfigEntry" name="parameters"/>
          >   <part element="tns:createConfigEntry" name="createConfigEntry"/>
          <   <part element="tns:listEntriesResponse" name="parameters"/>
          >   <part element="tns:listEntriesResponse" name="listEntriesResponse"/>
          <   <part element="tns:listEntries" name="parameters"/>
          >   <part element="tns:listEntries" name="listEntries"/>
          <   <part element="tns:createConfigEntryResponse" name="parameters"/>
          >   <part element="tns:createConfigEntryResponse" name="createConfigEntryResponse"/>
          <   <part element="tns:getConfigValue" name="parameters"/>
          >   <part element="tns:getConfigValue" name="getConfigValue"/>
          <   <part element="tns:deleteConfigEntryByName" name="parameters"/>
          >   <part element="tns:deleteConfigEntryByName" name="deleteConfigEntryByName"/>
          <   <part element="tns:deleteConfigEntryByNameResponse" name="parameters"/>
          >   <part element="tns:deleteConfigEntryByNameResponse" name="deleteConfigEntryByNameResponse"/>
          <   <part element="tns:getConfigValueResponse" name="parameters"/>
          >   <part element="tns:getConfigValueResponse" name="getConfigValueResponse"/>