Aki - thanks a lot. That worked pretty easily.
A few questions:
1. I see the IgnorablePolicyInterceptorProvider class in your svn link -
but it is missing from CXF javadoc and also seems to be missing from CXF
bundle. How do I use this class - do I need to copy it?
2. Ignoring is great in the short term - but assuming the wsdl policies
are accurate and I do not want to ignore them (in the long term), then
should I be coding a similar interceptor which handles the respective
Qnames and changes the message appropriately e.g. an authentication
interceptor can add username/pwd into msg?
3. what is the AssertionBuilder needed for (mentioned in
http://comments.gmane.org/gmane.comp.apache.cxf.user/21774) - is that
needed on the service side and not on the client side?
4. finally, when I ran the same code in a junit env, even without the
IgnoreablePolicyInterceptorPrivider, it succeeded with messages like:
[com.sun.xml.internal.ws.policy.EffectiveAlternativeSelector]
selectAlternatives
WARNING: WSP0075: Policy assertion
"{http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702}TransportBindin
g" was evaluated as "UNKNOWN"
I suppose their is a sun class somewhere in class path which provided
alternatives. I suppose this would be another way to ignore those policies?

Thanks again,

Vish.


On 2/13/13 1:50 AM, "Aki Yoshida" <[email protected]> wrote:

>your WSDL contains several proprietary policy assertions and CXF is
>complaining about those assertions.
>
>You have two options.
>
>1. get an equivalent WSDL without those proprietary assertions
>2. use IgnorablePolicyInterceptorProvider to explicitly ignore those
>assertions.
>If you go for option 2, you can find an example in and its beans
>configuration file.
>http://svn.apache.org/repos/asf/cxf/trunk/rt/ws/policy/src/test/java/org/a
>pache/cxf/ws/policy/IgnorablePolicyInterceptorProviderTest.java
>
>regards, aki
>
>2013/2/13 Vishwajit Pantvaidya <[email protected]>:
>> Thanks for the help Dan. That moved things a little ahead. I was able to
>> add the interceptors - but did not know what phase string I need to have
>> them return. So I debugged the flow in CXF code that is throwing the
>>error
>> - and it seems:
>> 1. the policy in the wsdl has many elements indicated as options
>> (wsp:Optional=true). But the code in
>>PolicyEngineImpl.supportsAlternative
>> seems to be ignoring that setting - it checks only for the variable
>>named
>> optional, not the wsp:Optional="true" value
>> 2. From the reason the error is thrown, it seems that if I provide a
>> supported alternative (Assertor?), the error will not get thrown I.e.
>> Things may work. But the forum post
>> http://comments.gmane.org/gmane.comp.apache.cxf.user/21774 from an
>>earlier
>> user talks about defining AssertionBuilders and
>> PolicyInterceptorProviders. And my use case seems exactly same as that
>> described in this post. So do I need to define an alternative selector
>>or
>> do I need AssertionBuilders / PolicyInterceptorProviders?
>> 3. Further, the endpoint does not really seem to be enforcing these
>> policies - if I edit the wsdl to remome the policies and use the edited
>> wsdl in my dispatch client call, everything works and I do get the data
>> from the svc. But when I use the wsdl with the policies, I get:
>>
>> Feb 12, 2013 11:00:59 PM
>> org.apache.cxf.ws.policy.AssertionBuilderRegistryImpl
>> handleNoRegisteredBuilder
>> WARNING: No assertion builder for type
>>
>>{http://www.sap.com/webas/710/soap/features/transportbinding/}OptimizedXM
>>LT
>> ransfer registered.
>> Feb 12, 2013 11:00:59 PM
>> org.apache.cxf.ws.policy.AssertionBuilderRegistryImpl
>> handleNoRegisteredBuilder
>> WARNING: No assertion builder for type
>> {http://www.sap.com/webas/630/soap/features/session/}Session registered.
>> Feb 12, 2013 11:00:59 PM
>> org.apache.cxf.ws.policy.AssertionBuilderRegistryImpl
>> handleNoRegisteredBuilder
>> WARNING: No assertion builder for type
>>
>>{http://www.sap.com/webas/700/soap/features/CentralAdministration/}Centra
>>lA
>> dministration registered.
>> Feb 12, 2013 11:00:59 PM
>> org.apache.cxf.ws.policy.AssertionBuilderRegistryImpl
>> handleNoRegisteredBuilder
>> WARNING: No assertion builder for type
>> {http://www.sap.com/NW05/soap/features/commit/}enableCommit registered.
>> Feb 12, 2013 11:00:59 PM
>> org.apache.cxf.ws.policy.AssertionBuilderRegistryImpl
>> handleNoRegisteredBuilder
>> WARNING: No assertion builder for type
>> {http://www.sap.com/NW05/soap/features/blocking/}enableBlocking
>>registered.
>> Feb 12, 2013 11:00:59 PM
>> org.apache.cxf.ws.policy.AssertionBuilderRegistryImpl
>> handleNoRegisteredBuilder
>> WARNING: No assertion builder for type
>> {http://www.sap.com/NW05/soap/features/transaction/}required registered.
>> Feb 12, 2013 11:00:59 PM
>> org.apache.cxf.ws.policy.AssertionBuilderRegistryImpl
>> handleNoRegisteredBuilder
>> WARNING: No assertion builder for type
>> {http://www.sap.com/NW05/soap/features/wsrm/}enableWSRM registered.
>> javax.xml.ws.soap.SOAPFaultException: None of the policy alternatives
>>can
>> be satisfied.
>> at org.apache.cxf.jaxws.DispatchImpl.mapException(DispatchImpl.java:285)
>> at org.apache.cxf.jaxws.DispatchImpl.invoke(DispatchImpl.java:388)
>> at org.apache.cxf.jaxws.DispatchImpl.invoke(DispatchImpl.java:241)
>> at SoapCaller.send(SoapCaller.java:188)
>> at SoapCaller.send(SoapCaller.java:184)
>> at SAPPollerAdapter.main(SAPPollerAdapter.java:70)
>> Caused by: org.apache.cxf.ws.policy.PolicyException: None of the policy
>> alternatives can be satisfied.
>> at
>>
>>org.apache.cxf.ws.policy.EndpointPolicyImpl.chooseAlternative(EndpointPol
>>ic
>> yImpl.java:165)
>> at
>>
>>org.apache.cxf.ws.policy.EndpointPolicyImpl.finalizeConfig(EndpointPolicy
>>Im
>> pl.java:145)
>> at
>>
>>org.apache.cxf.ws.policy.EndpointPolicyImpl.initialize(EndpointPolicyImpl
>>.j
>> ava:141)
>> at
>>
>>org.apache.cxf.ws.policy.PolicyEngineImpl.createEndpointPolicyInfo(Policy
>>En
>> gineImpl.java:555)
>> at
>>
>>org.apache.cxf.ws.policy.PolicyEngineImpl.getEndpointPolicy(PolicyEngineI
>>mp
>> l.java:301)
>> at
>>
>>org.apache.cxf.ws.policy.PolicyEngineImpl.getClientEndpointPolicy(PolicyE
>>ng
>> ineImpl.java:283)
>> at
>>
>>org.apache.cxf.transport.http.policy.PolicyUtils.getClient(PolicyUtils.ja
>>va
>> :150)
>> at
>>org.apache.cxf.transport.http.HTTPConduit.<init>(HTTPConduit.java:308)
>> at
>>
>>org.apache.cxf.transport.http.HTTPTransportFactory.getConduit(HTTPTranspo
>>rt
>> Factory.java:248)
>> at
>>
>>org.apache.cxf.binding.soap.SoapTransportFactory.getConduit(SoapTransport
>>Fa
>> ctory.java:229)
>> at
>>
>>org.apache.cxf.binding.soap.SoapTransportFactory.getConduit(SoapTransport
>>Fa
>> ctory.java:236)
>> at
>>
>>org.apache.cxf.endpoint.AbstractConduitSelector.getSelectedConduit(Abstra
>>ct
>> ConduitSelector.java:88)
>> at
>>
>>org.apache.cxf.endpoint.UpfrontConduitSelector.prepare(UpfrontConduitSele
>>ct
>> or.java:61)
>> at
>>
>>org.apache.cxf.endpoint.ClientImpl.prepareConduitSelector(ClientImpl.java
>>:8
>> 43)
>> at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:526)
>> at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:461)
>> at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:364)
>> at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:317)
>> at org.apache.cxf.endpoint.ClientImpl.invokeWrapped(ClientImpl.java:352)
>> at org.apache.cxf.jaxws.DispatchImpl.invoke(DispatchImpl.java:381)
>> ... 4 more
>>
>>
>> FYI here is the policy part of the endpoint wsdl:
>>
>>  <wsp:UsingPolicy wsdl:required="true" />
>>         <wsp:Policy wsu:Id="BN_BN_binding">
>>                 <saptrnbnd:OptimizedXMLTransfer
>>                         uri="http://xml.sap.com/2006/11/esi/esp/binxml";
>>
>>xmlns:saptrnbnd="http://www.sap.com/webas/710/soap/features/transportbind
>>in
>> g/"
>>                         wsp:Optional="true" />
>>                 <saptrnbnd:OptimizedMimeSerialization
>>
>>xmlns:saptrnbnd="http://schemas.xmlsoap.org/ws/2004/09/policy/optimizedm
>> imeserialization"
>>                         wsp:Optional="true" />
>>                 <wsp:ExactlyOne
>>xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy";>
>>                         <wsp:All>
>>                                 <sp:TransportBinding
>>
>>xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702";
>>
>>xmlns:sapsp="http://www.sap.com/webas/630/soap/features/security/polic
>> y"
>>
>>xmlns:wsa="http://www.w3.org/2005/08/addressing";
>> xmlns:wst="http://docs.oasis-open.org/ws-sx/ws-trust/200512";
>>
>>xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility";
>>
>>xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex";>
>>                                         <wsp:Policy>
>>                                                 <sp:TransportToken>
>>                                                         <wsp:Policy>
>>
>><sp:HttpsToken>
>>
>><wsp:Policy>
>>
>>        <sp:HttpBasicAuthentication />
>>
>></wsp:Policy>
>>
>></sp:HttpsToken>
>>                                                         </wsp:Policy>
>>                                                 </sp:TransportToken>
>>                                                 <sp:AlgorithmSuite>
>>                                                         <wsp:Policy>
>>
>><sp:Basic128Rsa15 />
>>                                                         </wsp:Policy>
>>                                                 </sp:AlgorithmSuite>
>>                                                 <sp:Layout>
>>                                                         <wsp:Policy>
>>
>><sp:Strict />
>>                                                         </wsp:Policy>
>>                                                 </sp:Layout>
>>                                         </wsp:Policy>
>>                                 </sp:TransportBinding>
>>                         </wsp:All>
>>                         <wsp:All>
>>                                 <sp:TransportBinding
>>
>>xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702";
>>
>>xmlns:sapsp="http://www.sap.com/webas/630/soap/features/security/polic
>> y"
>>
>>xmlns:wsa="http://www.w3.org/2005/08/addressing";
>> xmlns:wst="http://docs.oasis-open.org/ws-sx/ws-trust/200512";
>>
>>xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility";
>>
>>xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex";>
>>                                         <wsp:Policy>
>>                                                 <sp:TransportToken>
>>                                                         <wsp:Policy>
>>
>><sp:HttpsToken>
>>
>><wsp:Policy>
>>
>>        <sp:RequireClientCertificate />
>>
>></wsp:Policy>
>>
>></sp:HttpsToken>
>>                                                         </wsp:Policy>
>>                                                 </sp:TransportToken>
>>                                                 <sp:AlgorithmSuite>
>>                                                         <wsp:Policy>
>>
>><sp:Basic128Rsa15 />
>>                                                         </wsp:Policy>
>>                                                 </sp:AlgorithmSuite>
>>                                                 <sp:Layout>
>>                                                         <wsp:Policy>
>>
>><sp:Strict />
>>                                                         </wsp:Policy>
>>                                                 </sp:Layout>
>>                                         </wsp:Policy>
>>                                 </sp:TransportBinding>
>>                         </wsp:All>
>>                         <wsp:All>
>>                                 <sp:TransportBinding
>>
>>xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702";
>>
>>xmlns:sapsp="http://www.sap.com/webas/630/soap/features/security/polic
>> y"
>>
>>xmlns:wsa="http://www.w3.org/2005/08/addressing";
>> xmlns:wst="http://docs.oasis-open.org/ws-sx/ws-trust/200512";
>>
>>xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility";
>>
>>xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex";>
>>                                         <wsp:Policy>
>>                                                 <sp:TransportToken>
>>                                                         <wsp:Policy>
>>
>><sp:HttpsToken>
>>
>><wsp:Policy>
>>
>>        <sapsp:HTTPSSO2 />
>>
>></wsp:Policy>
>>
>></sp:HttpsToken>
>>                                                         </wsp:Policy>
>>                                                 </sp:TransportToken>
>>                                                 <sp:AlgorithmSuite>
>>                                                         <wsp:Policy>
>>
>><sp:Basic128Rsa15 />
>>                                                         </wsp:Policy>
>>                                                 </sp:AlgorithmSuite>
>>                                                 <sp:Layout>
>>                                                         <wsp:Policy>
>>
>><sp:Strict />
>>                                                         </wsp:Policy>
>>                                                 </sp:Layout>
>>                                         </wsp:Policy>
>>                                 </sp:TransportBinding>
>>                         </wsp:All>
>>                 </wsp:ExactlyOne>
>>                 <wsaw:UsingAddressing
>> xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl";
>>                         wsp:Optional="true" />
>>         </wsp:Policy>
>>         <wsp:Policy wsu:Id="IF_IF_QueryLeadIn">
>>                 <sapsession:Session
>>
>>xmlns:sapsession="http://www.sap.com/webas/630/soap/features/session/";>
>>
>><sapsession:enableSession>false</sapsession:enableSession>
>>                 </sapsession:Session>
>>                 <sapcentraladmin:CentralAdministration
>>
>>xmlns:sapcentraladmin="http://www.sap.com/webas/700/soap/features/Centra
>> lAdministration/"
>>                         wsp:Optional="true">
>>
>><sapcentraladmin:BusinessApplicationID>00163E0327EB1EE1B9A728D061073881
>>                         </sapcentraladmin:BusinessApplicationID>
>>                 </sapcentraladmin:CentralAdministration>
>>         </wsp:Policy>
>>         <wsp:Policy wsu:Id="OP_IF_OP_FindByElements">
>>                 <sapcomhnd:enableCommit
>>
>>xmlns:sapcomhnd="http://www.sap.com/NW05/soap/features/commit/";>false</s
>> apcomhnd:enableCommit>
>>                 <sapblock:enableBlocking
>>
>>xmlns:sapblock="http://www.sap.com/NW05/soap/features/blocking/";>true</s
>> apblock:enableBlocking>
>>                 <saptrhnw05:required
>>
>>xmlns:saptrhnw05="http://www.sap.com/NW05/soap/features/transaction/";>no
>> </saptrhnw05:required>
>>                 <saprmnw05:enableWSRM
>> xmlns:saprmnw05="http://www.sap.com/NW05/soap/features/wsrm/";>false
>>                 </saprmnw05:enableWSRM>
>>         </wsp:Policy>
>>
>>
>>
>> Thanks,
>>
>>
>> Vish.
>>
>>
>> On 2/12/13 1:04 PM, "Daniel Kulp" <[email protected]> wrote:
>>
>>>
>>>The Dispatch things are not proxies and thus the ClientProxy.getClient
>>>call wouldn't work.
>>>
>>>I think you need to cast the Dispatch to a CXF specific DispatchImpl and
>>>call the getClient method on it:
>>>
>>>((org.apache.cxf.jaxws.DispatchImpl)dispatch).getClient();
>>>
>>>Hope that helps.
>>>
>>>
>>>Dan
>>>
>>>
>>>
>>>On Feb 11, 2013, at 7:27 PM, vishp <[email protected]> wrote:
>>>
>>>> I am using jax-ws (cxf 2.4.3) dispatch client to invoke a webservice.
>>>>Since
>>>> the wsdl specifies some policies, my call fails with the error
>>>> "javax.xml.ws.soap.SOAPFaultException: None of the policy alternatives
>>>>can
>>>> be satisfied".
>>>>
>>>> After researching the forums, it seems I need to add an interceptor to
>>>> handle this situation. Now all the sample code that I have seen to do
>>>>this
>>>> is like:
>>>> ...
>>>> Client client = ClientProxy.getClient(servicePort);
>>>> ...
>>>>
>>>> My code using the dispatch client is like:
>>>>
>>>> Service svc = Service.create(wsdlurl, serviceNs);
>>>> dispatch = svc.createDispatch(portName, SOAPMessage.class,
>>>> Service.Mode.MESSAGE);
>>>> Binding binding = dispatch.getBinding();
>>>> List<Handler> handlerChain = binding.getHandlerChain();
>>>> handlerChain.add(new SOAPLoggingHandler(logger));
>>>> binding.setHandlerChain(handlerChain);
>>>>
>>>> I dont know how to get a Client object from the dispatch api so that I
>>>>can
>>>> set interceptors like:
>>>> cxfClient.getInInterceptors().add(...);
>>>>
>>>> I found this link in this forum which suggests it should be very easy:
>>>>
>>>>http://cxf.547215.n5.nabble.com/adding-features-and-or-interceptors-to-
>>>>a-
>>>>dynamic-jax-ws-dispatcher-client-td3200104.html
>>>> But after observing the interfaces for these classes and a few others,
>>>>I am
>>>> unable to figure it out. Pls help.
>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> View this message in context:
>>>>http://cxf.547215.n5.nabble.com/adding-interceptors-to-a-dynamic-jax-ws
>>>>-d
>>>>ispatcher-client-tp5723001.html
>>>> Sent from the cxf-user mailing list archive at Nabble.com.
>>>
>>>--
>>>Daniel Kulp
>>>[email protected] - http://dankulp.com/blog
>>>Talend Community Coder - http://coders.talend.com
>>>
>>

Reply via email to