Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Creating a web-service client with a known but inaccessible wsdl

We have been provided with a wsdl and xsd schema by a company we are working with via email. The web-services we are interfacing with are accessed through a IPsec tunnel. There are local references(on their end) in the published WSDL which means we cannot consume it.

1st question: Is this a common setup? I thought the point of having a WSDL was not only to define the contract but to also expose the service to consumers.

I can easily generate client/server code off of the provided WSDL using wsimport, wsconsume, etc.. I know when my generated client makes a call to my generated service it produces the correct message I need.

2nd Question: Is there an easy way to route this to a different soap address?

I just want to be able to do something like:

SalesTaxService svc = new SalesTaxService();
SalesTax tax = svc.getSalesTaxPort()
tax.getRate("NY");

But not use the soap address defined in the WSDL. I would like to avoid writing a bunch of dispatch clients for each method.

Am I missing something?

*In response to skaffman: This is what was generated. It defaulted to wsdlLocation as a name shrug

   @WebServiceClient(name = "SomeService")
   public class SomeService_Service extends Service {

    public SomeService_Service(URL wsdlLocation, QName serviceName) {
        super(wsdlLocation, serviceName);            
    }

    public SomeService_Service(URL wsdlLocation) {
        super(wsdlLocation, new QName("urn:some_service", "SomeService"));   
    }
  }
like image 877
jgrowl Avatar asked Jan 19 '10 22:01

jgrowl


1 Answers

I thought the point of having a WSDL was not only to define the contract but to also expose the service to consumers.

No, WSDL is purely a descriptive tool, it has no real runtime role. The web service operates completely independently of the WSDL. It's not uncommon for the WSDL to not be exposed.

Is there an easy way to route this to a different soap address?

That depends entirely on what web service implementation you're using, and you don't say, although I'm guessing JAX-WS. If that's the case, the artifacts that JAX-WS's tools generate allow you to pass in the URL to the client stub constructors, I think.

like image 196
skaffman Avatar answered Oct 23 '22 15:10

skaffman