It's probably a bug in version 2.1.3
The following is from AbstractHTTPTransportFactory.java. The value of
useHttps is derived from configuredConduit.getAddress();
static HttpURLConnectionFactory getConnectionFactory(
HTTPConduit configuredConduit
) {
HttpURLConnectionFactory fac = null;
boolean useHttps = false;
try {
String address = configuredConduit.getAddress();
if (address != null
&&
address.startsWith(HttpsURLConnectionFactory.HTTPS_URL_PROTOCOL_ID + ":/"))
{
useHttps = true;
}
} catch (MalformedURLException e) {
//ignore, just use info based on Tls
}
if (useHttps
|| configuredConduit.getTlsClientParameters() != null) {
TLSClientParameters params =
configuredConduit.getTlsClientParameters();
if (params == null) {
params = new TLSClientParameters(); //use defaults
}
fac = new HttpsURLConnectionFactory(params);
} else {
fac = new HttpURLConnectionFactoryImpl();
}
return fac;
}
The following is from HTTPConduit. If defaultEndpointURL is not null, it
will not use the new URL in BindingProvider.ENDPOINT_ADDRESS_PROPERTY.
Therefore, the only way is to change defaultEndpointURL in WSDL which is not
user friendly. Could this be improved in version 2.1.4?
public String getAddress() throws MalformedURLException {
if (defaultEndpointURL != null) {
return defaultEndpointURL.toExternalForm();
} else if (fromEndpointReferenceType) {
return getTarget().getAddress().getValue();
}
return endpointInfo.getAddress();
}
On Tue, Jan 6, 2009 at 3:47 AM, Glen Mazza <[email protected]> wrote:
>
> In case there's isn't (hopefully others can help you out here), you'll
> almost
> certainly want to use XSLT[1] to change the URLs from https:// to http://or
> vice-versa. Learning how to do this is time well spent, as such ability
> can
> be used in many other circumstances.
>
> Glen
>
> [1] http://www-128.ibm.com/developerworks/edu/wa-autoxml1-i.html
>
>
> Christopher Cheng wrote:
> >
> > In the production environment, we use http through VPN (which is better
> > than
> > https and without VPN) and in the development environment, we use https
> > only. There are over 100 wsdl in my project so changing all default URLs
> > is
> > a real pain.
> > Is there a less painful way to fix this mess?
> >
> > On Sat, Jan 3, 2009 at 3:59 AM, Glen Mazza <[email protected]> wrote:
> >
> >>
> >> Just a guess...if you look at your SessionCreateRQService.java file,
> >> you'll
> >> see that it hardcodes a WSDL file, almost certainly the WSDL you used to
> >> create the class.
> >>
> >> Anyway, if you modify *that* WSDL (i.e., go into that WSDL's
> >> wsdl:service/port and modify the default URL there), and change the URL
> >> there from https to http, your problem below should get fixed (as a
> >> matter
> >> of fact, you can even switch the WSDL completely to the actual URL you
> >> want
> >> to use and not need to set the endpoint address below.) IIRC setting
> the
> >> ENDPOINT_ADDRESS_PROPERTY works with CXF if you're going https<-->https,
> >> or
> >> http<-->http, but between the two protocols this error tends to occur.
> >> Probably a bug, but just as well I would say, in case you accidentally
> >> downgraded from https to http without realizing it.
> >>
> >> Glen
> >>
> >>
> >> Christopher Cheng wrote:
> >> >
> >> > It doesn't seem to work... Any idea?
> >> >
> >> > SessionCreateRQService service = new SessionCreateRQService();
> >> > SessionCreatePortType port =
> >> service.getSessionCreatePortType();
> >> >
> >> > Client c = ClientProxy.getClient(port);
> >> > HTTPConduit conduit = (HTTPConduit) c.getConduit();
> >> > conduit.setTlsClientParameters(null);
> >> >
> >> > String endpointAddress =
> >> "http://webservices.mydomain.com/websrc
> >> ";
> >> > Map<String, Object> requestContext =
> >> > ((BindingProvider)port).getRequestContext();
> >> > requestContext.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
> >> > endpointAddress);
> >> >
> >> >
> >> > It returns
> >> >
> >> > javax.xml.ws.soap.SOAPFaultException: Could not send Message.
> >> > at
> >> >
> org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:145)
> >> > at $Proxy47.sessionCreateRQ(Unknown Source)
> >> > at test.SessionCreateTest.getSession(SessionCreateTest.java:87)
> >> > at test.SessionCreateTest.main(SessionCreateTest.java:30)
> >> > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> >> > at
> >> >
> >>
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> >> > at
> >> >
> >>
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> >> > at java.lang.reflect.Method.invoke(Method.java:597)
> >> > at
> com.intellij.rt.execution.application.AppMain.main(AppMain.java:90)
> >> > Caused by: org.apache.cxf.interceptor.Fault: Could not send Message.
> >> > at
> >> >
> >>
> org.apache.cxf.interceptor.MessageSenderInterceptor.handleMessage(MessageSenderInterceptor.java:48)
> >> > at
> >> >
> >>
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:220)
> >> > at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:466)
> >> > at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:299)
> >> > at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:251)
> >> > at
> org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:73)
> >> > at
> >> >
> org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:124)
> >> > ... 8 more
> >> > Caused by: java.io.IOException: Illegal Protocol http for HTTPS
> >> > URLConnection Factory.
> >> > at
> >> >
> >>
> org.apache.cxf.transport.https.HttpsURLConnectionFactory.createConnection(HttpsURLConnectionFactory.java:124)
> >> > at
> >> >
> org.apache.cxf.transport.http.HTTPConduit.prepare(HTTPConduit.java:482)
> >> > at
> >> >
> >>
> org.apache.cxf.interceptor.MessageSenderInterceptor.handleMessage(MessageSenderInterceptor.java:46)
> >> > ... 14 more
> >> >
> >> >
> >> >>You'll probably need to do:
> >> >>Client cl = ClientProxy.getClient(port);
> >> > (HttpConduit)cl.getConduit()).setTlsClientParameters(null);
> >> >>to make sure the TLS stuff is all reset to nothing and force
> >> > re-initializing the conduit as a non-tls conduit.
> >> >>Dan
> >> >
> >> >
> >> >
> >> > On Tuesday 16 December 2008 10:38:52 am Christopher Cheng wrote:
> >> >
> >> >> I was trying to change the endpoint address from a https address to
> >> >
> >> >> http address
> >> >
> >> >>
> >> >
> >> >> endpointAddress =
> >> >> *http://webservices.mydomain.com/websrc*<
> >> http://webservices.mydomain.com/websrc>
> >> > ;
> >> >
> >> >> SessionCreateRQService service = new SessionCreateRQService();
> >> >
> >> >> SessionCreatePortType port = service.getSessionCreatePortType();
> >> >
> >> >> Map<String, Object> requestContext =
> >> >
> >> >> ((BindingProvider)port).getRequestContext();
> >> >
> >> >> requestContext.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
> >> >
> >> >> endpointAddress);
> >> >
> >> >>
> >> >
> >> >>
> >> >
> >> >> CXF produces an error like this. What am I missing?
> >> >
> >> >>
> >> >
> >> >> Caused by: java.io.IOException: Illegal Protocol http for HTTPS
> >> >
> >> >>URLConnection Factory.
> >> >
> >> >> at
> >> >
> >> >>
> >> >
> >>
> >>org.apache.cxf.transport.https.HttpsURLConnectionFactory.createConnecti
> >> >
> >> >>on(H
> >> >
> >> >>ttpsURLConnectionFactory.java:124) at
> >> >
> >> >>
> >> >
> >>
> >>org.apache.cxf.transport.http.HTTPConduit.prepare(HTTPConduit.java:482)
> >> >
> >> >>at
> >> >
> >>
> >>org.apache.cxf.interceptor.MessageSenderInterceptor.handleMessage(Messa
> >> >
> >> >>geSe
> >> >
> >> >>nderInterceptor.java:46) ... 14 more
> >> >
> >> >
> >> >
> >> >
> >> >
> >> > --
> >> >
> >> > Daniel Kulp
> >> >
> >> > [email protected]
> >> >
> >> > *http://dankulp.com/blog* <http://dankulp.com/blog>
> >> >
> >> >
> >>
> >> --
> >> View this message in context:
> >>
> http://www.nabble.com/Re%3A-Re%3A-problem-changing-endpoint-address-from-https-to-http-tp21254391p21256811.html
> >> Sent from the cxf-user mailing list archive at Nabble.com.
> >>
> >>
> >
> >
>
> --
> View this message in context:
> http://www.nabble.com/Re%3A-Re%3A-problem-changing-endpoint-address-from-https-to-http-tp21254391p21297901.html
> Sent from the cxf-user mailing list archive at Nabble.com.
>
>