On Tuesday, August 23, 2011 1:55:45 PM Jesse Pangburn wrote:
> Understand the following and agree it would work:
> boolean endpointEnabled = getEndpoint().getProperty("ws.addressing...");
> boolean busEnabled = bus.getProperty("ws.add....");
> 
> if (busEnabled || endpointEnabled) {
>  .....
> }
> 
> If you prefer to revise the patch I submitted to do this instead, that's
> totally fine by me.  OTOH, when the list of features is typically going to
> be under three anyway, looping over zero to three items is probably not
> going to impact performance.  I'm happy either way.

The way you did it is fine.   Running tests now. 

Dan


> 
> Thanks,
> Jesse
> 
> -----Original Message-----
> From: Daniel Kulp [mailto:dk...@apache.org]
> Sent: Tuesday, August 23, 2011 11:05 AM
> To: users@cxf.apache.org
> Cc: Jesse Pangburn
> Subject: Re: setting wsa:addressing feature in cxf:bus causes wrong action
> header to be sent when using Dispatch API
> On Monday, August 22, 2011 3:59:39 PM Jesse Pangburn wrote:
> > I don't think that will work because the WSAddressingFeature doesn't
> > have
> > that method signature, it has: protected void
> > initializeProvider(InterceptorProvider provider, Bus bus) {
> 
> WSAddressingFeature is a subclass of AbstractFeature which does have the
> signature.
> 
> > Client is a subclass of InterceptorProvider, but although you could do
> > something like: if (provider instanceof Client){
> > 
> >       client.getEndpoint().put("addressing.enabled",
> >       Boolean.TRUE);
> > 
> > }
> > 
> > This wouldn't get called if the wsAddressing was enabled on the bus. 
> > The
> > AbstractFeature has the method signature you're referring to, but it's
> > only called on a client object so again if the bus is enabling it then
> > it won't work.
> 
> Right, but a fairly simple:
> 
> boolean endpointEnabled = getEndpoint().getProperty("ws.addressing...");
> boolean busEnabled = bus.getProperty("ws.add....");
> 
> if (busEnabled || endpointEnabled) {
>  .....
> }
> 
> would work and simpler than searching all the features and such.
> 
> > It appears that we have three remaining choices:
> > 1.  in the DispatchImpl we will have to loop over the bus features, the
> > endpoint features, and the passed in dispatch features to determine if
> > ws
> > addressing is enabled or not during the invoke operation 2.  we do that
> > loop in the ServiceImpl when building the Dispatch and set some property
> > in the dispatch as Aki suggested. 3.  In the ServiceImpl we copy the
> > features from the bus and the passed in dispatch feature into the
> > endpoint feature list.  Then the invoke method that already exists will
> > find the feature in the list.
> > 
> > #1 is kind of ugly cause it's doing the same thing over and over on a
> > dispatch object, where if someone is re-using a dispatch object for
> > multiple invoke operations then they'll be paying that performance
> > penalty over and over.  #3 is not quite so bad cause you still have to
> > loop over the same list, but at least it's already in once place to do
> > it, but it's almost as bad.  I'm not thrilled about #2 because I find
> > adding
> > properties/flags for information we already have to be confusing to new
> > developers.
> > 
> > To come up with a solution, I decided this was similar to interceptors
> > in
> > that you have to process a compound list from disparate sources.  To
> > build the interceptor chain, you getInterceptors() on the bus, the
> > client, the endpoint, the binding, and service databinding.  This is
> > done on EVERY client invocation and then the full list is processed. 
> > So to parallel the way you've done interceptors, we should loop inside
> > the invoke method over the features contained in the client factory,
> > the endpoint, and the bus (those are the features locations I know of).
> >  Unfortunately, the client factory is not retained outside the
> > ServiceImpl so I think those features must be copied into the
> > endpoint's feature list so they're treated the same as features added
> > in the createDispatch method as a parameter to the method.  Then the
> > Dispatch's invoke will loop over that new endpoint feature list and the
> > bus feature list to get the complete set and determine if ws-addressing
> > is enabled.
> > 
> > I will create the patch this way unless anyone objects?
> 
> I'm OK with this, it's just a little more processing on each request, but
> nothing THAT major.
> 
> 
> Dan
> 
> > Thanks,
> > Jesse
> > 
> > -----Original Message-----
> > From: Daniel Kulp [mailto:dk...@apache.org]
> > Sent: Friday, August 19, 2011 2:29 PM
> > To: users@cxf.apache.org
> > Cc: Jesse Pangburn
> > Subject: Re: setting wsa:addressing feature in cxf:bus causes wrong
> > action header to be sent when using Dispatch API
> > 
> > On Friday, August 19, 2011 3:07:50 PM Jesse Pangburn wrote:
> > > Hi Aki,
> > > I'm REALLY new to CXF so I don't quite understand your answer. 
> > > Could
> > > you
> > > explain what sort of configuration option you mean, and what shape
> > > it
> > > would take?  In that case, how would the code "find the option and
> > > set
> > > the action accordingly"?
> > 
> > I kind of wonder if the WSAddressingFeature should do something like:
> >     public void initialize(Client client, Bus bus) {
> >     
> >         super.initialize(client, bus);
> >         client.getEndpoint().put("addressing.enabled",
> >         Boolean.TRUE);
> >     
> >     }
> > 
> > or  similar.  The frontend could then just do a simple
> > client.getEndpoint().get("addressing.enabled") != null or similar and
> > not
> > have to go through looking for the feature and such.
> > 
> > Dan
> > 
> > > Thanks,
> > > Jesse
> > > 
> > > -----Original Message-----
> > > From: Aki Yoshida [mailto:elak...@googlemail.com]
> > > Sent: Friday, August 19, 2011 8:49 AM
> > > To: users@cxf.apache.org
> > > Subject: Re: setting wsa:addressing feature in cxf:bus causes wrong
> > > action header to be sent when using Dispatch API
> > > 
> > > Hi,
> > > I think we should just provide a configuration option to either
> > > enable
> > > or disable this operation determination code in DispathImpl,
> > > independently of whether the addressing feature is engaged. In this
> > > way, you can decide whether to let this code find the operation and
> > > set the action accordingly or manually set the operation and action
> > > at
> > > the dispatcher.
> > > 
> > > regards, aki
> > > 
> > > 2011/8/19 Jesse Pangburn <jesse.pangb...@us.lawson.com>:
> > > > Hi,
> > > > Another Dispatch API / wsAddressing question.  I configured ws
> > > > addressing on the cxf bus like this, instead of adding the
> > > > feature
> > > > directly to the dispatch client: <cxf:bus>
> > > > 
> > > >        <cxf:features>
> > > >        
> > > >                <wsa:addressing/>
> > > >        
> > > >        </cxf:features>
> > > > 
> > > > </cxf:bus>
> > > > 
> > > > However using both SOAP 1.1 and 1.2 Dispatch API clients, I
> > > > found
> > > > that
> > > > it sets the wrong Action header by just using a default rather
> > > > than
> > > > the
> > > > one from the WSDL.  I'm not certain which code is responsible
> > > > for
> > > > this
> > > > but I see in the DispatchImpl.java the following code: boolean
> > > > wsaEnabled = false;
> > > > for (AbstractFeature feature :
> > > > ((JaxWsClientEndpointImpl)client.getEndpoint()).getFeatures()) {
> > > > if
> > > > (feature instanceof WSAddressingFeature) {
> > > > 
> > > >    wsaEnabled = true;
> > > >  
> > > >  }
> > > > 
> > > > }
> > > > 
> > > > This only looks for the features on the endpoint to determine if
> > > > it
> > > > should do ws addressing, not the features on the bus too.  So
> > > > the
> > > > DispatchImpl doesn't set this stuff up.  Is there other code
> > > > down
> > > > the
> > > > line that should be doing a similar thing with the bus's
> > > > features?
> > > > Or
> > > > should the DispatchImpl be checking the bus features as well as
> > > > the
> > > > endpoint features here?
> > > > 
> > > > Thanks,
> > > > Jesse
> > > > 
> > > > -----Original Message-----
> > > > From: Daniel Kulp [mailto:dk...@apache.org]
> > > > Sent: Thursday, August 18, 2011 2:29 PM
> > > > To: users@cxf.apache.org
> > > > Cc: David Karlsen
> > > > Subject: Re: java.lang.ClassNotFoundException:
> > > > org.w3c.dom.ElementTraversal during wsdl2java generation - any
> > > > clues?
> > > > 
> > > > 
> > > > I would check you meven dependencies for any old versions of
> > > > Xerces
> > > > or
> > > > xml- api's.   It kind of looks like it's pulling in some older
> > > > stuff
> > > > someplace that is conflicting.
> > > > 
> > > > Dan
> > > > 
> > > > On Thursday, August 18, 2011 4:07:25 PM David Karlsen wrote:
> > > >> With 2.4.2 and the maven plugin doing wsdl2java I get:
> > > >> 
> > > >> *15:57:55*  message : Failed to execute goal
> > > >> org.apache.cxf:cxf-codegen-plugin:2.4.2:wsdl2java
> > > >> (generate-sources)
> > > >> on project pays-web-ws-pays:
> > > >> org/w3c/dom/ElementTraversal*15:57:55*
> > > >> cause : org/w3c/dom/ElementTraversal*15:57:55*  Stack trace :
> > > >> *15:57:55*
> > > >> org.apache.maven.lifecycle.LifecycleExecutionException:
> > > >> Failed to execute goal
> > > >> org.apache.cxf:cxf-codegen-plugin:2.4.2:wsdl2java
> > > >> (generate-sources)
> > > >> on project pays-web-ws-pays:
> > > >> org/w3c/dom/ElementTraversal*15:57:55*
> > > >> 
> > > >>       at
> > > >> 
> > > >> org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoE
> > > >> xecu
> > > >> tor.
> > > >> java: 217)*15:57:55* at
> > > >> org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoE
> > > >> xecu
> > > >> tor.
> > > >> java: 153)*15:57:55* at
> > > >> org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoE
> > > >> xecu
> > > >> tor.
> > > >> java: 145)*15:57:55* at
> > > >> org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.bui
> > > >> ldPr
> > > >> ojec
> > > >> t(Lif ecycleModuleBuilder.java:84)*15:57:55* at
> > > >> org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.bui
> > > >> ldPr
> > > >> ojec
> > > >> t(Lif ecycleModuleBuilder.java:59)*15:57:55* at
> > > >> org.apache.maven.lifecycle.internal.LifecycleStarter.singleThr
> > > >> eade
> > > >> dBui
> > > >> ld(Li fecycleStarter.java:183)*15:57:55* at
> > > >> org.apache.maven.lifecycle.internal.LifecycleStarter.execute(L
> > > >> ifec
> > > >> ycle
> > > >> Start er.java:161)*15:57:55* at
> > > >> org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:319)
> > > >> *15:
> > > >> 57:5
> > > >> 5* at
> > > >> org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)*1
> > > >> 5:57
> > > >> 
> > > >> :55
> > > >> 
> > > >> * at
> > > >> org.jvnet.hudson.maven3.launcher.Maven3Launcher.main(Maven3Lau
> > > >> nche
> > > >> r.j
> > > >> ava:79 )*15:57:55* at
> > > >> sun.reflect.NativeMethodAccessorImpl.invoke0(Native
> > > >> Method)*15:57:55*
> > > >> 
> > > >>     at
> > > >> 
> > > >> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccess
> > > >> orIm
> > > >> pl.j
> > > >> ava:39 )*15:57:55* at
> > > >> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMeth
> > > >> odAc
> > > >> cess
> > > >> orImp l.java:25)*15:57:55* at
> > > >> java.lang.reflect.Method.invoke(Method.java:597)*15:57:55*   
> > > >> at
> > > >> org.codehaus.plexus.classworlds.launcher.Launcher.launchStanda
> > > >> rd(L
> > > >> aunc
> > > >> her.j ava:329)*15:57:55* at
> > > >> org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launc
> > > >> her.
> > > >> java
> > > >> 
> > > >> :239) *15:57:55* at
> > > >> 
> > > >> org.jvnet.hudson.maven3.agent.Maven3Main.launch(Maven3Main.jav
> > > >> a:15
> > > >> 8)*1
> > > >> 5:57: 55* at
> > > >> hudson.maven.Maven3Builder.call(Maven3Builder.java:121)*15:57:
> > > >> 55*
> > > >> at
> > > >> hudson.maven.Maven3Builder.call(Maven3Builder.java:73)*15:57:5
> > > >> 5*
> > > >> at
> > > >> hudson.remoting.UserRequest.perform(UserRequest.java:118)*15:5
> > > >> 7:55
> > > >> *
> > > >> at
> > > >> hudson.remoting.UserRequest.perform(UserRequest.java:48)*15:57
> > > >> :55
> > > >> *
> > > >> at hudson.remoting.Request$2.run(Request.java:287)*15:57:55*
> > > >> at
> > > >> java.util.concurrent.Executors$RunnableAdapter.call(Executors.
> > > >> java
> > > >> 
> > > >> :44
> > > >> 
> > > >> 1)*15: 57:55* at
> > > >> java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:
> > > >> 303)
> > > >> *15:
> > > >> 57:55 * at
> > > >> java.util.concurrent.FutureTask.run(FutureTask.java:138)*15:57
> > > >> :55*
> > > >> at
> > > >> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadP
> > > >> oolE
> > > >> xec
> > > >> utor.j ava:886)*15:57:55* at
> > > >> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolE
> > > >> xecu
> > > >> tor.
> > > >> java: 908)*15:57:55* at
> > > >> java.lang.Thread.run(Thread.java:662)*15:57:55*  Caused by:
> > > >> org.apache.maven.plugin.MojoExecutionException:
> > > >> org/w3c/dom/ElementTraversal*15:57:55*        at
> > > >> org.apache.cxf.maven_plugin.WSDL2JavaMojo.callWsdl2Java(WSDL2J
> > > >> avaM
> > > >> ojo.
> > > >> java:6 13)*15:57:55* at
> > > >> org.apache.cxf.maven_plugin.WSDL2JavaMojo.execute(WSDL2JavaMoj
> > > >> o.ja
> > > >> va:4
> > > >> 36)*1 5:57:55* at
> > > >> org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(
> > > >> Defa
> > > >> ultB
> > > >> uildP luginManager.java:101)*15:57:55* at
> > > >> org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoE
> > > >> xecu
> > > >> tor.
> > > >> java: 209)*15:57:55* ... 27 more*15:57:55*  Caused by:
> > > >> java.lang.NoClassDefFoundError:
> > > >> org/w3c/dom/ElementTraversal*15:57:55*
> > > > 
> > > > at
> > > > 
> > > >> java.lang.ClassLoader.defineClass1(Native Method)*15:57:55*  
> > > >> at
> > > >> java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)*15
> > > >> :57:
> > > >> 55*
> > > >> 
> > > >>       at
> > > >> 
> > > >> java.lang.ClassLoader.defineClass(ClassLoader.java:615)*15:57:
> > > >> 55*
> > > >> at
> > > >> java.security.SecureClassLoader.defineClass(SecureClassLoader.
> > > >> java
> > > >> 
> > > >> :141
> > > >> 
> > > >> )*15: 57:55* at
> > > >> java.net.URLClassLoader.defineClass(URLClassLoader.java:283)*1
> > > >> 5:57
> > > >> 
> > > >> :55*
> > > >> 
> > > >> at
> > > >> java.net.URLClassLoader.access$000(URLClassLoader.java:58)*15:
> > > >> 57:5
> > > >> 5*
> > > >> at
> > > >> java.net.URLClassLoader$1.run(URLClassLoader.java:197)*15:57:5
> > > >> 5*
> > > >> at java.security.AccessController.doPrivileged(Native
> > > >> Method)*15:57:55*     at
> > > >> java.net.URLClassLoader.findClass(URLClassLoader.java:190)*15:
> > > >> 57:5
> > > >> 5*
> > > >> 
> > > >>       at
> > > >> 
> > > >> org.codehaus.plexus.classworlds.realm.ClassRealm.loadClassFrom
> > > >> Self
> > > >> (Cla
> > > >> ssRea lm.java:386)*15:57:55* at
> > > >> org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loa
> > > >> dCla
> > > >> ss(S
> > > >> elfFi rstStrategy.java:42)*15:57:55* at
> > > >> org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(Cla
> > > >> ssRe
> > > >> alm.
> > > >> java: 244)*15:57:55* at
> > > >> org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(Cla
> > > >> ssRe
> > > >> alm.
> > > >> java: 230)*15:57:55* at
> > > >> org.apache.xerces.parsers.AbstractDOMParser.startDocument(Unkn
> > > >> own
> > > >> Source)*15:57:55*     at
> > > >> org.apache.xerces.impl.dtd.XMLDTDValidator.startDocument(Unkno
> > > >> wn
> > > >> Source)*15:57:55*     at
> > > >> org.apache.xerces.impl.XMLDocumentScannerImpl.startEntity(Unkn
> > > >> own
> > > >> Source)*15:57:55*     at
> > > >> org.apache.xerces.impl.XMLVersionDetector.startDocumentParsing
> > > >> (Unk
> > > >> nown
> > > >> Source)*15:57:55*     at
> > > >> org.apache.xerces.parsers.XML11Configuration.parse(Unknown
> > > >> Source)*15:57:55*     at
> > > >> org.apache.xerces.parsers.XML11Configuration.parse(Unknown
> > > >> Source)*15:57:55*     at
> > > >> org.apache.xerces.parsers.XMLParser.parse(Unknown
> > > >> Source)*15:57:55*
> > > >> 
> > > >>       at
> > > >>       org.apache.xerces.parsers.DOMParser.parse(Unknown
> > > >> 
> > > >> Source)*15:57:55*     at
> > > >> org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown
> > > >> Source)*15:57:55*     at
> > > >> javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:1
> > > >> 24)*
> > > >> 15:5
> > > >> 7:55* at
> > > >> org.apache.cxf.tools.common.dom.ExtendedDocumentBuilder.parse(
> > > >> Exte
> > > >> nded
> > > >> Docum entBuilder.java:95)*15:57:55* at
> > > >> org.apache.cxf.tools.common.toolspec.ToolSpec.<init>(ToolSpec.
> > > >> java
> > > >> 
> > > >> :71)
> > > >> 
> > > >> *15:5 7:55* at
> > > >> org.apache.cxf.tools.common.toolspec.ToolRunner.runTool(ToolRu
> > > >> nner
> > > >> .jav
> > > >> a:86) *15:57:55* at
> > > >> org.apache.cxf.tools.wsdlto.WSDLToJava.run(WSDLToJava.java:113
> > > >> )*15
> > > >> 
> > > >> :57:
> > > >> 55* at
> > > >> org.apache.cxf.tools.wsdlto.WSDLToJava.run(WSDLToJava.java:86)
> > > >> *15:
> > > >> 57:
> > > >> 55* at
> > > >> org.apache.cxf.maven_plugin.WSDL2JavaMojo.callWsdl2Java(WSDL2J
> > > >> avaM
> > > >> ojo.
> > > >> java: 610)*15:57:55* ... 30 more*15:57:55*  Caused by:
> > > >> java.lang.ClassNotFoundException:
> > > >> org.w3c.dom.ElementTraversal*15:57:55*
> > > >> 
> > > >>       at
> > > >> 
> > > >> org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loa
> > > >> dCla
> > > >> ss(S
> > > >> elfFir stStrategy.java:50)*15:57:55* at
> > > >> org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(Cla
> > > >> ssRe
> > > >> alm.
> > > >> java: 244)*15:57:55* at
> > > >> org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(Cla
> > > >> ssRe
> > > >> alm.
> > > >> java: 230)*15:57:55* ... 59 more
> > > >> 
> > > >> 
> > > >> Running on latest sun 1.6 jdk.
> > > >> Any clues?
> > > >> 
> > > >> --
> > > >> David J. M. Karlsen - http://www.linkedin.com/in/davidkarlsen
> > > > 
> > > > --
> > > > Daniel Kulp
> > > > dk...@apache.org
> > > > http://dankulp.com/blog
> > > > Talend - http://www.talend.com
> 
> --
> Daniel Kulp
> dk...@apache.org
> http://dankulp.com/blog
> Talend - http://www.talend.com
-- 
Daniel Kulp
dk...@apache.org
http://dankulp.com/blog
Talend - http://www.talend.com

Reply via email to