Taavi Ilves Taavi Ilves - 6 months ago 54
Java Question

Best way to consume RPC/encoded webservice?

I need to consume old-school RPC/encoded WSDL webservice for my backend. At first I tried to use Apache CXF and JAX-WS for that, but JAX-WS

tool doesn't eat rpc/enoded WSDL.

[ERROR] rpc/encoded wsdls are not supported in JAXWS 2.0.

I'm also in doubt about using JAX-RPC for this job, because it's way out-dated. Axis 1.4 is 5 years old tool.

Currently I see these three options:

  1. use JAX-WS
    to send and receive SOAP and parse it somehow, one example

  2. use JAX-RPC and gain bad karma for using outdated technology,

  3. do it all manually and hate myself later.

Neither of these sound too good, so I would appreciate if you could give some good leads, thought what to do and how to solve it.



My case was solved with hand editing WSDL from encoded to literal (basically under operations input and output use="literal" was the only replacement) and then I could generate stubs with Apache CXF. It could be done, because endpoint wasn't parsing RPC/encoded exactly and RPC/encoded spec XML couldn't be validated against WSDL).

Although Axis 1.4 may work for you, using Apache CXF with that little WSDL hack, may be a better way.

[Old answer]

For reference -- I opted for using JAX-RPC and Axis 1.4 this time. I generated client code and hopefully can replace it with JAX-WS implementation when service gets upgraded.