Unclear error messages given if client policy configuration can't be found.
---------------------------------------------------------------------------
Key: CXF-4054
URL: https://issues.apache.org/jira/browse/CXF-4054
Project: CXF
Issue Type: Bug
Reporter: Glen Mazza
Assignee: Glen Mazza
Priority: Minor
Dennis has noted:
http://cxf.547215.n5.nabble.com/Invalid-property-bus-of-bean-class-error-Spring-problem-tp5163771p5165056.html
With this tutorial:
http://www.jroller.com/gmazza/entry/cxf_x509_profile_secpol, in particular, the
WSC config file within it:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://cxf.apache.org/jaxws
http://cxf.apache.org/schemas/jaxws.xsd">
<jaxws:client name="{http://www.example.org/contract/DoubleIt}DoubleItPort"
createdFromAPI="true">
<jaxws:properties>
<entry key="ws-security.callback-handler"
value="client.ClientKeystorePasswordCallback"/>
<entry key="ws-security.encryption.properties"
value="clientKeystore.properties"/>
<entry key="ws-security.signature.properties"
value="clientKeystore.properties"/>
<entry key="ws-security.encryption.username" value="myservicekey"/>
</jaxws:properties>
</jaxws:client>
</beans>
Usage of an incorrect port name in the "name" attribute of the jaxws:client
element gives unhelpful/confusing error messages.
If the port name doesn't exist at all (e.g.,
"{http://www.example.org/contract/DoubleIt}DoubleItXYZ"), the reader gets this
error:
WARNING: Interceptor for
{http://www.example.org/contract/DoubleIt}DoubleItService#{http://www.example.org/contract/DoubleIt}DoubleIt
has thrown exception, unwinding now
org.apache.cxf.interceptor.Fault: No signature username found.
at
org.apache.cxf.ws.security.wss4j.policyhandlers.AsymmetricBindingHandler.doSignBeforeEncrypt(AsymmetricBindingHandler.java:172)
at
org.apache.cxf.ws.security.wss4j.policyhandlers.AsymmetricBindingHandler.handleBinding(AsymmetricBindingHandler.java:96)
at
org.apache.cxf.ws.security.wss4j.PolicyBasedWSS4JOutInterceptor$PolicyBasedWSS4JOutInterceptorInternal.handleMessage(PolicyBasedWSS4JOutInterceptor.java:164)
at
org.apache.cxf.ws.security.wss4j.PolicyBasedWSS4JOutInterceptor$PolicyBasedWSS4JOutInterceptorInternal.handleMessage(PolicyBasedWSS4JOutInterceptor.java:88)
at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263)
at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:519)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:449)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:352)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:304)
at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:88)
at
org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:134)
at $Proxy24.doubleIt(Unknown Source)
at client.WSClient.doubleIt(WSClient.java:28)
at client.WSClient.main(WSClient.java:21)
I'm not sure what should be done in this case -- because a non-matching port
name like the above should indeed be ignored (as it could refer to another port
in another WSDL), but perhaps a clearer error given that no configuration was
provided for the client endpoint for the port being used.
If the service name was erroneously used instead of the port name, this error
is given:
Exception in thread "main"
org.springframework.beans.factory.BeanCreationException: Error creating bean
with name '{http://www.example.org/contract/DoubleIt}DoubleItService': Error
setting property values; nested exception is
org.springframework.beans.NotWritablePropertyException: Invalid property 'bus'
of bean class [org.apache.cxf.service.ServiceImpl]: Bean property 'bus' is not
writable or has an invalid setter method. Does the parameter type of the setter
match the return type of the getter?
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1361)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1086)
Here, an error message given that the port, and not the service name, should be
referred to.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira