You would need to create a catalog that would map one URL to the other.     
The wsdl2java command has a -catalog flag that can be used to pass it it.   
For the runtime, you would need to name the file META-INF/jax-ws-catalog.xml 
and make sure it's on the classpath. 

A catalog would look something like:

<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog" prefer="system">
    <rewriteSystem systemIdStartString="http://www.w3.org/2006/03/addressing"; 
rewritePrefix="classpath:/schemas/wsdl"/>
</catalog>

Google "XML catalog" should provide a full description of them.


Dan





On Wednesday 12 January 2011 4:40:22 pm Robert Crocombe wrote:
> Hello.  I am trying to consume the web service at:
> 
> https://ws2.ondemand.qas.com/ProOnDemand/V2/ProOnDemandService.asmx?WSDL
> 
> I generated code using:
> 
> wsdl2java -d attempt2/ -client -validate -verbose -exsh true
> https://ws2.ondemand.qas.com/ProOnDemand/V2/ProOnDemandService.asmx?WSDL
> 
> However, I kept getting:
> 
> Exception in thread "main"
> com.sun.xml.internal.ws.client.ClientTransportException: HTTP transport
> error: java.net.ConnectException: Connection timed out
> 
> Debugging lead me to see that I was attempting open a conection to
> ws2.ondemand.qas.com on port 8152.  This presumably comes from the WSDL:
> 
>   <wsdl:service name="OnDemandIntermediaryV2">
>     <wsdl:port name="QASOnDemand" binding="tns:QASOnDemand">
>       <soap:address location="
> https://ws2.ondemand.qas.com:8152/ProOnDemand/V2/ProOnDemandService.asmx";
> /> </wsdl:port>
> 
> but I believe it to be wrong: the server is not listening there.  I tried
> following the directions to alter the "service address" (I assume that's
> the proper nomenclature for what I'm trying to do: all this web service
> stuff is new to me):
> 
> http://docs.huihoo.com/apache/cxf/2.2.4/client-http-transport-including-ssl
> -support.html
> 
> in the subsection titled "How to override the service address?" but was not
> successful.  I don't see that javax.xml.ws.Service has a getServicePort()
> method as used in the first example, I see nothing about
> JaxWsProxyFactoryBean in the code like in the second example, and
> attempting to add a port led to a WebServiceException about how the new
> port was not valid: it seems like the portName argument needs to be one in
> the WSDL but yet I couldn't replace one of the existing ones with a new
> one.
> 
> ANYWAY, I decided to try simply copying the WSDL to my local box (running
> Apache) and then change it like so:
> 
> --- a/original_wsdl 2011-01-06 13:22:55.997881804 -0700
> +++ b/wsdl 2011-01-12 13:57:43.666573012 -0700
> @@ -899,10 +899,10 @@
>    </wsdl:binding>
>    <wsdl:service name="OnDemandIntermediaryV2">
>      <wsdl:port name="QASOnDemand" binding="tns:QASOnDemand">
> -      <soap:address location="
> https://ws2.ondemand.qas.com:8152/ProOnDemand/V2/ProOnDemandService.asmx";
> /> +      <soap:address location="
> https://ws2.ondemand.qas.com/ProOnDemand/V2/ProOnDemandService.asmx"; />
>      </wsdl:port>
>      <wsdl:port name="QASOnDemand1" binding="tns:QASOnDemand1">
> -      <soap12:address location="
> https://ws2.ondemand.qas.com:8152/ProOnDemand/V2/ProOnDemandService.asmx";
> /> +      <soap12:address location="
> https://ws2.ondemand.qas.com/ProOnDemand/V2/ProOnDemandService.asmx"; />
>      </wsdl:port>
>    </wsdl:service>
> 
> and then instantiate my client via:
> 
>         OnDemandIntermediaryV2 ss = new OnDemandIntermediaryV2(new URL("
> http://localhost/~rcrocomb/wsdl.txt";));
>         QASOnDemand port = ss.getQASOnDemand();
> 
> rather than via:
> 
>         OnDemandIntermediaryV2 ss = new OnDemandIntermediaryV2();
>         QASOnDemand port = ss.getQASOnDemand();
> 
> This works.  So my question would be:
> 
> How do I achieve this same result without having to host the modified WSDL?
> 
> Thanks!

-- 
Daniel Kulp
[email protected]
http://dankulp.com/blog

Reply via email to