Best way to consume RPC/encoded webservice?

Taavi Ilves picture Taavi Ilves · Sep 2, 2011 · Viewed 28k times · Source

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 wsimport 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 javax.xml.ws.Dispatch 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.

Answer

Taavi Ilves picture Taavi Ilves · Sep 6, 2011

UPDATE

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.