I am creating a Web Service Provider using a WSDL file that I get from a different department. (This is the requirement).
After creating the Web Service Provider I get some empty services (only inputs and outputs, no implementation) that are to be implemented according to my desired business logic.
This services are under /…/name_of_wsp/services/.
All is OK until the WSDL I have changes.
If the WSDL changes what I do is usually to delete all the generated artifacts and the Web Service Provider and then go back through the process of creating the Web Service Provider.
However if I do this, it means that all the code that I put in the generated services will be lost.
How can this be avoided?
Is there another way to re-create the WSP without deleting the “old” artifacts?
Or can I specify where should the services be stored, so they are not deleted after each re-creation of the WSP.
You should change the code only if there are changes in the input/output signature of the webServices, if not you can use the same one. Kindly correct if I misunderstand your question.
Unfortunately let’s assume that something is modified in the input/output signature. I get the modified WSDL from the other department. (this WSDL is used by more applications, so the application that is calling the other creates the WSDL definition in order to make sure it has the same interface with all the applications).
How should I proceed in this case? I must re-create the WSP.
I’m not sure what version you’re using, but in the more recent versions, you can right-click on the Provider WSD and click on Refresh Web Service Descriptor. It warns you that you may lose some of the changes you’ve made, but I just ran a simple test in v9.6 and my changes to the generated services were preserved.
Now, even if we assume that the changes to the generated service are always preserved, it may make sense to implement all your logic in a separate service anyway and simply invoke that service from the auto-generated service. This way, if the auto-generated service gets overwritten for whatever reason, all you lose is one line of code. Similarly, if the signature changes, all you have to do is change the mapping in that one line of code and you’re done.
This is the same exact approach I take with BPMS services and it works great.