Topic
  • No replies
SystemAdmin
SystemAdmin
1215 Posts

Pinned topic Web Services Versioning issue

‏2009-04-13T15:41:29Z |
We have currently a stack of webservices with EJB implimentation based on JAX-RPC . ( Development is on RAD7 and Deployment on WAS 5.1)
The consumers use RAD7 or WSAD for generating the client code from the WSDLs. We are facing the typical webservices versioning problem, everytime a new tag is added for some operation ( i.e. Model classes - pojos) the clients have to be regenerated otherwise they face a de- serialization error for that new tag in the response. This is causing lot of issues as they consumers of these webservices say that there is no backward compatibility.
I have myself tried to generate clients from older WSDLs and they fail when a new xml tag comes and it throws a De-serialization error ( client generated from RAD7, WSAD and even axis based on JAX-RPC for WAS-5.1)
I want to know what can be possible solution to this typical problem.
If you need any further details please let me know.
The clients get the below error if they encounter a new tag in the response
faultCode: Server.generalException
faultString: org.xml.sax.SAXException: WSWS3047E: Error: Cannot deserialize element accManagedCd of bean com.jpmc.pbit.pbds.account.model.Acc.
faultActor: null
faultDetail:

org.xml.sax.SAXException: WSWS3047E: Error: Cannot deserialize element accManagedCd of bean com.account.model.Acc
at com.ibm.ws.webservices.engine.WebServicesFault.makeFault(WebServicesFault.java:150)
at com.ibm.ws.webservices.engine.SOAPPart.getSOAPEnvelope(SOAPPart.java:868)
at com.ibm.ws.webservices.engine.SOAPPart.getFault(SOAPPart.java:1225)
at com.ibm.ws.webservices.engine.Message.getFault(Message.java:757)
at com.ibm.ws.webservices.engine.Message.ifFaultThrowSelf(Message.java:737)
at com.ibm.ws.webservices.engine.PivotHandlerWrapper.invoke(PivotHandlerWrapper.java:252)
at com.ibm.ws.webservices.engine.WebServicesEngine.invoke(WebServicesEngine.java:255)
at com.ibm.ws.webservices.engine.client.Connection.invokeEngine(Connection.java:685)
at com.ibm.ws.webservices.engine.client.Connection.invoke(Connection.java:611)
at com.ibm.ws.webservices.engine.client.Connection.invoke(Connection.java:441)
at com.ibm.ws.webservices.engine.client.Stub$Invoke.invoke(Stub.java:662)
at com.account.facade.AccountDetailsFacadeBeanSoapBindingStub.getAccountInformation(AccountDetailsFacadeBeanSoapBindingStub.java:1370)
at com.account.facade.AccountDetailsFacadeBeanProxy.getAccountInformation(AccountDetailsFacadeBeanProxy.java:142)
at ProdTestServlet.doPost(ProdTestServlet.java:50)
at ProdTestServlet.doGet(ProdTestServlet.java:27)

accManagedCd is a new tag that was added to the new WSDL and the current client is generated from an older WSDL.

I can take any changes , like shifting to WAS 6.1 , removing EJBs as webservices implementors or any other possible solution which can resolve this issue.