Changing WSDL = recreate axis java client?

Discussion in 'Java' started by matrixhasu, Aug 24, 2007.

  1. matrixhasu

    matrixhasu Guest

    Hi all,
    we'd like to recieve your opinion about a strange and unexpected issue
    we're facing right now: we have a web service for which we've provided
    a jar java client (generated with axis and wsdl2java) to some users.

    We had to modify that web service to include two additional response
    fields. After web service modification, the java client stops working
    reporting

    org.xml.sax.SAXException: Invalid element in
    com.webmethods.www.__outputJobInfo - DESCRIPTION

    where "DESCRIPTION" is the first additional field.

    Did you already face this problem? How would I solve it? I thought
    clients would be indipendent to web services output values, if that
    change only involve additional fields (i.e., not modify existing one).

    Is there some other library/way-to-invoke-ws without have to change
    (and thus notify everyone using it) the jar client?

    Thanks in advance for your help.

    Regards,
    Sandro
     
    matrixhasu, Aug 24, 2007
    #1
    1. Advertising

  2. matrixhasu

    Ian Wilson Guest

    matrixhasu wrote:
    > we have a web service for which we've provided
    > a jar java client (generated with axis and wsdl2java) to some users.
    >
    > We had to modify that web service to include two additional response
    > fields. After web service modification, the java client stops working
    > reporting
    >
    > org.xml.sax.SAXException: Invalid element in
    > com.webmethods.www.__outputJobInfo - DESCRIPTION
    >
    > where "DESCRIPTION" is the first additional field.
    >
    > Did you already face this problem? How would I solve it?


    I include an API version number as part of the namespace. I provide both
    old and new services in parallel until all the clients have transitioned.

    > I thought
    > clients would be indipendent to web services output values, if that
    > change only involve additional fields (i.e., not modify existing one).


    Some client web-server technologies are much more tolerant of this than
    others. Perl's SOAP::Lite for example, but it depends how the client is
    coded. In general, if I change the API I expect to have to change the
    clients.
     
    Ian Wilson, Aug 24, 2007
    #2
    1. Advertising

  3. matrixhasu

    blazer Guest

    Hi all,

    This is in response to the posting I've seen regarding AXIS and web
    services client libaries blowing up when a WSDL document changes.

    Basically the error occurs because a mapping does not exist between an
    entry in the WSDL document and your client class. Modifying the
    client class as follows will prevent this error from being thrown.

    Here's what I had to do to fix the issue:

    1) Create a class that extends
    org.apache.axis.encoding.ser.BeanDeserializer.
    a) Create constructors that basically pass the parameters to the
    super class.
    b) Override the following method as follows:
    @Override
    public SOAPHandler onStartChild(String arg0, String arg1, String
    arg2, Attributes arg3, DeserializationContext arg4) throws
    SAXException {
    // TODO Auto-generated method stub
    try{
    return super.onStartChild(arg0, arg1, arg2, arg3, arg4);
    }catch (SAXException e){
    return null;
    }
    }
    2) Find the object that is being returned from the web service -
    (client class).
    a) Override the following method as follows:
    /**
    * Get Custom Deserializer
    */
    public static org.apache.axis.encoding.Deserializer
    getDeserializer(
    java.lang.String mechType,
    java.lang.Class _javaType,
    javax.xml.namespace.QName _xmlType) {
    return new BigYDeserializer(_javaType, _xmlType, typeDesc);

    //new org.apache.axis.encoding.ser.BeanDeserializer(
    // _javaType, _xmlType, typeDesc);
    }
     
    blazer, Aug 28, 2007
    #3
  4. matrixhasu

    nss

    Joined:
    May 1, 2012
    Messages:
    1
    Hi guys,

    I know this is an old thread, but I am stuck with the same problem.
    Could someone please elaborate this solution in more detail?

    Regards,
    NS

     
    nss, May 1, 2012
    #4
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.

Share This Page