Okay, I take on board your advice, but I think that it begs my initial question.  In your point 2 you state "Use the same jar on the server and the client." My quest, however, is to be able to add additional functionality to the service, i.e. new operations, and not have to force every client in the field to upgrade in unison. This is the proverbial problem with distributed systems and I had hoped that Web Services solved it in cases where there were only additions to functionality. In the IBM article "Best practices for Web services versioning", http://www-128.ibm.com/developerworks/webservices/library/ws-version/, it rather clearly states:
Roughly speaking, there are two types of changes in a WSDL document that cannot break an existing requestor, and several types of changes that can. In accordance with standard industry nomenclature, we will call these backwards-compatible and non-backwards-compatible changes, respectively. The types of changes that are backwards compatible are:
    * Addition of new WSDL operations to an existing WSDL document. If existing requestors are unaware of a new operation, then they will be unaffected by its introduction.
    * Addition of new XML schema types within a WSDL document that are not contained within previously existing types. Again, even if a new operation requires a new set of complex data types, as long as those data types are not contained within any previously existing types (which would in turn require modification of the parsing code for those types), then this type of change will not affect an existing requestor.

So how does one actually accomplish this or am I misreading the intent.

Thanks,
Joel

robert wrote:
Combining EJB with axis 1.x requires integration with the app server. I've 
done it a lot with jboss, which uses axis internally. Basically there's a lot 
of files to edit. 

My advice: 

1) Work with wsdl2java instead of java2wsdl. Just create your endpoint like: 

YourImpl implements SessionBean, EJB_Context

Then implement your endpoint methods that match your wsdl2java generated 
methods and classes. 

2) Create a jar with your wsdl2java generated classes and use that to create 
your references. Use the same jar on the server and the client. 

That's the basics. Beyond that, its all about the configuration, unfortunately 
different on every app server. In the long run you can use spring to solve 
that somewhat. 

HTH,
Robert 
http://www.braziloutsource.com/

Em Segunda 13 Fevereiro 2006 14:04, o Joel Rosi-Schwartz escreveu:
  
Hi,

It is my understanding that it should be possible to add a new operation
to a Web Service and still connect to it from old clients. The books and
articles I have read imply this, but in practice I have not been able to
accomplish it.

What I have are a set of EJB Service  beans. I generate the WSDL using
axis Java2WSDL.  I deploy  the WSEndPoints on my client and I use the
following code to access the proxy:

    ServiceFactory factory = ServiceFactory.newInstance();
    Service service = factory.createService(url, qname);
    ServerWSEndPoint endpoint = (ServerWSEndPoint)
    service.getPort(ServerWSEndPoint.class);

This works fine. Now when I add a new method to the ServerWSBean and
redeploy to the server but not the client I get an exception:

    javax.xml.rpc.ServiceException: Incompatible service endpoint
    interface: com.etish.useme.est.webservices.ServerWSEndPoint

Which is understandable since the server and client have different
versions of the ServerWSEndPoint class.

I figure that I a missing a piece of the puzzle.  I would appreciate any
suggestions or pointers to a reference that actually explains what I
need to know.

Thanks,
Joel
    

  

Reply via email to