On Oct 29, 2012, at 6:29 PM, Gary Gregory <[email protected]> wrote:

> Am I hearing different approaches here?
> 
> (1) Don't send SOAPAction. I'm still not sure how to tell
> JaxWsDynamicClientFactory how to do that. There is no other way than to
> strip the header from an interceptor.

If the wsdl has it in it, it should be sent.

> (2) Remove SOAP actions from WSDL and JaxWsDynamicClientFactory will not
> create the header. When I do that XMLSpy complains about the WSDL and at
> runtime, I get some other misbehavior, like the creds are always rejected.
> I'd just hacked that quickly so I am not sure of the details.

That should work, or at least setting the action to the empty string.

> (3) Send SOAPAction but it must be matched on the server with a CXF config
> file that points to WSDLs?

You should be able to have action  attributes on the @WebMethod annotations 
that would allow the use of them for the code first scenarios.   That said, if 
the service is represented by a wsdl, you are normally MUCH better off to use 
the actual wsdl on the service side.

There is a 4th option:
You could write a simple interceptor that runs early in the in chain on the 
server side that clears the SOAPAction header.   



Dan



> 
> Thank you for your help,
> Gary
> 
> On Mon, Oct 29, 2012 at 5:00 PM, Glen Mazza <[email protected]> wrote:
> 
>> You can provide the WSDL to use via the wsdlLocation attribute in the CXF
>> configuration file:
>> http://www.jroller.com/gmazza/**entry/web_service_tutorial#**WFstep6<http://www.jroller.com/gmazza/entry/web_service_tutorial#WFstep6>
>> 
>> Glen
>> 
>> 
>> On 10/29/2012 04:49 PM, Daniel Kulp wrote:
>> 
>>> This may be on the service side:
>>> 
>>> INFO : Creating Service {http://soap.comm.server.**
>>> appinterface.seagullsw.com/}**LdeWebServiceProviderService<http://soap.comm.server.appinterface.seagullsw.com/%7DLdeWebServiceProviderService>from
>>>  class com.seagullsw.appinterface.
>>> **server.comm.soap.**SoapServletCxf$**LdeWebServiceProvider
>>> 
>>> 
>>> Looks like the server side isn't using the WSDL and thus may not have the
>>> proper Actions available for it.
>>> 
>>> Dan
>>> 
>>> 
>>> 
>>> 
>>> 
>>> On Oct 29, 2012, at 4:01 PM, Gary Gregory <[email protected]> wrote:
>>> 
>>> Hi All:
>>>> 
>>>> I am updating our app server to 2.7.0 from 2.6.0 and our WSS tests are
>>>> failing. All the other tests are OK. I'm not sure if this is something
>>>> we've gotten away with in the past with our pile of custom interceptors
>>>> or
>>>> if this is an incompatibility. It would be very difficult for me to
>>>> extract
>>>> a standalone test based on our code so I am taking a short cut to see if
>>>> this will ring an obvious bell with someone.
>>>> 
>>>> The test looks like this:
>>>> 
>>>>    @Test
>>>>    public void testWssNamePwd() throws Exception {
>>>>        final URL wsdl =
>>>> ClassLoader.getSystemResource(**this.getConfigResource() +
>>>> "/functions/TestBackEndWss.**wsdl");
>>>>        final Client client =
>>>> JaxWsDynamicClientFactory.**newInstance().createClient(**
>>>> wsdl.toExternalForm());
>>>>        final Map<String, Object> outProps = new HashMap<String,
>>>> Object>();
>>>>        outProps.put(**WSHandlerConstants.ACTION,
>>>> WSHandlerConstants.USERNAME_**TOKEN);
>>>>        outProps.put(**WSHandlerConstants.PASSWORD_**TYPE,
>>>> WSConstants.PW_TEXT);
>>>>        outProps.put(**WSHandlerConstants.USER,
>>>> AisTestBackEnd.USER_NAME);
>>>>        outProps.put(**WSHandlerConstants.PW_**CALLBACK_REF, new
>>>> CallbackHandler() {
>>>>            @Override
>>>>            public void handle(final Callback[] callbacks) {
>>>>                final WSPasswordCallback callback = (WSPasswordCallback)
>>>> callbacks[0];
>>>>                callback.setPassword(**AisTestBackEnd.PASSWORD);
>>>>            }
>>>>        });
>>>>        client.getOutInterceptors().**add(new
>>>> WSS4JOutInterceptor(outProps))**;
>>>>        final String ARG_VALUE = "string arg value";
>>>>        Object[] results =
>>>> client.invoke(AisTestBackEnd.**ONESTRINGARGWSS_USERNAMETOKEN_**
>>>> FUNCTION_NAME,
>>>> new Object[] { ARG_VALUE });
>>>>        Assert.assertNotNull(results);
>>>>        Assert.assertNotNull(results[**0]);
>>>>        Assert.assertTrue(((String) results[0]).indexOf(ARG_VALUE) > 0);
>>>>        //more asserts...
>>>> 
>>>> This is the exception I see:
>>>> 
>>>> 2012-10-29 15:04:40,656 [qtp563831333-20 - /lde/] WARN : Interceptor for
>>>> {
>>>> http://soap.comm.server.**appinterface.seagullsw.com/}**
>>>> LdeWebServiceProviderService#{**http://soap.comm.server.**
>>>> appinterface.seagullsw.com/}**invokehas<http://soap.comm.server.appinterface.seagullsw.com/%7DLdeWebServiceProviderService#%7Bhttp://soap.comm.server.appinterface.seagullsw.com/%7Dinvokehas>
>>>> thrown exception, unwinding now
>>>> org.apache.cxf.interceptor.**Fault: The given SOAPAction
>>>> test.**oneStringArgWssUsernameToken does not match an operation.
>>>>    at
>>>> org.apache.cxf.binding.soap.**interceptor.**SoapActionInInterceptor$**
>>>> SoapActionInAttemptTwoIntercep**tor.handleMessage(**
>>>> SoapActionInInterceptor.java:**188)
>>>>    at
>>>> org.apache.cxf.binding.soap.**interceptor.**SoapActionInInterceptor$**
>>>> SoapActionInAttemptTwoIntercep**tor.handleMessage(**
>>>> SoapActionInInterceptor.java:**162)
>>>>    at
>>>> org.apache.cxf.phase.**PhaseInterceptorChain.**doIntercept(**
>>>> PhaseInterceptorChain.java:**271)
>>>>    at
>>>> org.apache.cxf.transport.**ChainInitiationObserver.**onMessage(**
>>>> ChainInitiationObserver.java:**121)
>>>>    at
>>>> org.apache.cxf.transport.http.**AbstractHTTPDestination.**invoke(**
>>>> AbstractHTTPDestination.java:**238)
>>>>    at
>>>> org.apache.cxf.transport.**servlet.ServletController.**
>>>> invokeDestination(**ServletController.java:222)
>>>>    at
>>>> org.apache.cxf.transport.**servlet.ServletController.**
>>>> invoke(ServletController.java:**202)
>>>>    at
>>>> org.apache.cxf.transport.**servlet.ServletController.**
>>>> invoke(ServletController.java:**137)
>>>>    at
>>>> org.apache.cxf.transport.**servlet.CXFNonSpringServlet.**
>>>> invoke(CXFNonSpringServlet.**java:158)
>>>>    at
>>>> org.apache.cxf.transport.**servlet.AbstractHTTPServlet.**handleRequest(*
>>>> *AbstractHTTPServlet.java:239)
>>>>    at
>>>> org.apache.cxf.transport.**servlet.AbstractHTTPServlet.**
>>>> doPost(AbstractHTTPServlet.**java:159)
>>>>    at javax.servlet.http.**HttpServlet.service(**HttpServlet.java:754)
>>>>    at
>>>> org.apache.cxf.transport.**servlet.AbstractHTTPServlet.**
>>>> service(AbstractHTTPServlet.**java:215)
>>>>    at
>>>> org.eclipse.jetty.servlet.**ServletHolder.handle(**
>>>> ServletHolder.java:648)
>>>>    at
>>>> org.eclipse.jetty.servlet.**ServletHandler.doHandle(**
>>>> ServletHandler.java:455)
>>>>    at
>>>> org.eclipse.jetty.server.**handler.ContextHandler.**
>>>> doHandle(ContextHandler.java:**1072)
>>>>    at
>>>> org.eclipse.jetty.servlet.**ServletHandler.doScope(**
>>>> ServletHandler.java:382)
>>>>    at
>>>> org.eclipse.jetty.server.**handler.ContextHandler.**
>>>> doScope(ContextHandler.java:**1006)
>>>>    at
>>>> org.eclipse.jetty.server.**handler.ScopedHandler.handle(**
>>>> ScopedHandler.java:135)
>>>>    at
>>>> org.eclipse.jetty.server.**handler.**ContextHandlerCollection.**handle(*
>>>> *ContextHandlerCollection.java:**255)
>>>>    at
>>>> org.eclipse.jetty.server.**handler.HandlerWrapper.handle(**
>>>> HandlerWrapper.java:116)
>>>>    at org.eclipse.jetty.server.**Server.handle(Server.java:361)
>>>>    at
>>>> org.eclipse.jetty.server.**AbstractHttpConnection.**handleRequest(**
>>>> AbstractHttpConnection.java:**485)
>>>>    at
>>>> org.eclipse.jetty.server.**AbstractHttpConnection.**content(**
>>>> AbstractHttpConnection.java:**937)
>>>>    at
>>>> org.eclipse.jetty.server.**AbstractHttpConnection$**
>>>> RequestHandler.content(**AbstractHttpConnection.java:**998)
>>>>    at org.eclipse.jetty.http.**HttpParser.parseNext(**
>>>> HttpParser.java:856)
>>>>    at org.eclipse.jetty.http.**HttpParser.parseAvailable(**
>>>> HttpParser.java:240)
>>>>    at
>>>> org.eclipse.jetty.server.**AsyncHttpConnection.handle(**
>>>> AsyncHttpConnection.java:82)
>>>>    at
>>>> org.eclipse.jetty.io.nio.**SelectChannelEndPoint.handle(**
>>>> SelectChannelEndPoint.java:**627)
>>>>    at
>>>> org.eclipse.jetty.io.nio.**SelectChannelEndPoint$1.run(**
>>>> SelectChannelEndPoint.java:51)
>>>>    at
>>>> org.eclipse.jetty.util.thread.**QueuedThreadPool.runJob(**
>>>> QueuedThreadPool.java:608)
>>>>    at
>>>> org.eclipse.jetty.util.thread.**QueuedThreadPool$3.run(**
>>>> QueuedThreadPool.java:543)
>>>>    at java.lang.Thread.run(Unknown Source)
>>>> 
>>>> The debug log which includes CXF, Jetty and our own logging is here:
>>>> http://pastebin.com/LXb9vjQD
>>>> 
>>>> The WSDL is here: http://pastebin.com/y12erjaw
>>>> 
>>>> Thank you in advance for any guidance you can give me in figuring this
>>>> out.
>>>> 
>>>> Gary
>>>> 
>>>> --
>>>> E-Mail: [email protected] | [email protected]
>>>> JUnit in Action, 2nd Ed: 
>>>> <http://goog_1249600977>http:/**/bit.ly/ECvg0<http://bit.ly/ECvg0>
>>>> Spring Batch in Action: 
>>>> <http://s.apache.org/HOq>http:**//bit.ly/bqpbCK<http://bit.ly/bqpbCK>
>>>> Blog: http://garygregory.wordpress.**com<http://garygregory.wordpress.com>
>>>> Home: http://garygregory.com/
>>>> Tweet! http://twitter.com/GaryGregory
>>>> 
>>> 
>> 
>> --
>> Glen Mazza
>> Talend Community Coders - coders.talend.com
>> blog: www.jroller.com/gmazza
>> 
>> 
> 
> 
> -- 
> E-Mail: [email protected] | [email protected]
> JUnit in Action, 2nd Ed: <http://goog_1249600977>http://bit.ly/ECvg0
> Spring Batch in Action: <http://s.apache.org/HOq>http://bit.ly/bqpbCK
> Blog: http://garygregory.wordpress.com
> Home: http://garygregory.com/
> Tweet! http://twitter.com/GaryGregory

-- 
Daniel Kulp
[email protected] - http://dankulp.com/blog
Talend Community Coder - http://coders.talend.com

Reply via email to