Setting ENDPOINT_ADDRESS_PROPERTY property on client proxy has no effect
------------------------------------------------------------------------
Key: CXF-414
URL: https://issues.apache.org/jira/browse/CXF-414
Project: CXF
Issue Type: Bug
Components: JAX-WS Runtime
Reporter: Jarek Gawor
I'm doing the following:
Greeter g = foo.getPort(Greeter.class);
(javax.xml.ws.BindingProvider)g).getRequestContext().put(javax.xml.ws.BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
"http://localhost:8080/jaxws-war-2.0-SNAPSHOT/hello");
g.greetMe("foo");
when the ENDPOINT_ADDRESS_PROPERTY is set or not I get the following exception:
org.apache.cxf.interceptor.Fault
at org.apache.cxf.endpoint.ClientImpl.getConduit(ClientImpl.java:299)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:138)
at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:73)
at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:12
4)
at $Proxy54.greetMe(Unknown Source)
at org.apache.hello_world_soap_http.GreeterImpl.greetMe(GreeterImpl.java
....
Caused by: java.net.MalformedURLException
at java.net.URL.<init>(URL.java:601)
at java.net.URL.<init>(URL.java:464)
at java.net.URL.<init>(URL.java:413)
at org.apache.cxf.transport.http.HTTPConduit.<init>(HTTPConduit.java:138
)
at org.apache.cxf.transport.http.HTTPConduit.<init>(HTTPConduit.java:111
)
at org.apache.cxf.transport.http.HTTPConduit.<init>(HTTPConduit.java:97)
at org.apache.cxf.transport.http.HTTPTransportFactory.getConduit(HTTPTra
nsportFactory.java:115)
at org.apache.cxf.transport.http.HTTPTransportFactory.getConduit(HTTPTra
nsportFactory.java:111)
at org.apache.cxf.binding.soap.SoapTransportFactory.getConduit(SoapTrans
portFactory.java:152)
at org.apache.cxf.endpoint.ClientImpl.getConduit(ClientImpl.java:295)
... 41 more
The MalformedURLException s raised in HTTPConduit because
endpointInfo.getAddress() returns null or empty.
To fix this I had to add the following to JaxWsClientProxy:
...
ContextPropertiesMapping.mapRequestfromJaxws2Cxf(reqContext);
String address =
(String)reqContext.get(org.apache.cxf.message.Message.ENDPOINT_ADDRESS);
if (address != null) {
endpoint.getEndpointInfo().setAddress(address);
}
..
context.put(Client.REQUEST_CONTEXT, reqContext);
Also, I think the problem is when the Service instance is created from full
WSDL the EndpointInfo is not completely filled out with the service address
information as specified in WSDL. But that's a separate issue from above.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.