OK Brad sent me a config sample offline, but I wanted to respond here so it
would be properly archived. In essence, when you have a config like this:
<jaxws:endpoint
id="testService"
address="/testService" >
<jaxws:implementor>
<ref bean="myTestService" />
</jaxws:implementor>
</jaxws:endpoint>
<bean id="myTestService" class="....TestServiceImpl"/>
And you combine it with the transaction/AOP stuff from spring, Spring will
replace the myTestService with a Java proxy which will take care of the
transactions. The downside is that this proxy won't have the annotations on
it necessary to create the web service. So CXF won't be able to create the
service properly.
There is at least one and possibly two the solutions to this. The first one
which I know works is to use the <jaxws:server> syntax which allows you to
specify the service class to use to construct the wsdl/service interface:
<jaxws:server
id="testService"
address="/testService" serviceClass="...TestServiceImpl">
<jaxws:implementor>
<ref bean="myTestService" />
</jaxws:implementor>
</jaxws:server>
The other possible solution is to tell Spring to use CGLIB bytecode weaving
instead of proxies. This can be done by adding the proxy-target-class
attribute supposedly (I'm going by the spring docs here, I've never tried
it):
<aop:config *proxy-target-class="true"*>
I think I'll probably add support for users to specify the
serviceClass/implementorClass on the <jaxws:endpoint>, but in the meantime
at least one of those solutions should work.
Cheers,
- Dan
On 7/30/07, Dan Diephouse <[EMAIL PROTECTED]> wrote:
>
> Hi Brad,
>
> Any chance you could at least attach your complete spring configuration? I
> think the config you outlined should work, but I would like to see more. Of
> course a test case would be welcome too :-)
>
> - Dan
>
> On 7/27/07, Brad Harper <[EMAIL PROTECTED]> wrote:
> >
> > The snapshot and adding @ResponseWrappers solved my service issues as
> > long
> > as I use a client other than CXF. I've testing utilities I can use for
> > now. My main issue is when I enable my transaction advice. Simply
> > enabling
> > this section in my config causes 4 of my 10 services to fail with the
> > exception listed below:
> >
> > <aop:config>
> > <aop:advisor id="serviceTx" advice-ref="txAdvice"
> > pointcut="execution(* *..service..*.*(..))" order="0"/>
> > </aop:config>
> >
> >
> > <tx:advice id="txAdvice">
> > <tx:attributes>
> > <tx:method name="find*" read-only="true"/>
> > <tx:method name="*"/>
> > </tx:attributes>
> > </tx:advice>
> >
> >
> > All of the services are configured identically.... which is puzzling why
> > the
> > certain 4 fail.
> >
> > INFO: Interceptor has thrown exception, unwinding now
> > org.apache.cxf.interceptor.Fault: Marshalling Error:
> > com.gdservices.model.thirdparty.TpMat is not known to this context
> > at org.apache.cxf.jaxb.JAXBEncoderDecoder.marshall(
> > JAXBEncoderDecoder.java:170)
> > at org.apache.cxf.jaxb.io.DataWriterImpl.write(
> > DataWriterImpl.java
> > :42)
> > at
> > org.apache.cxf.interceptor.AbstractOutDatabindingInterceptor.writeParts(
> > AbstractOutDatabindingInterceptor.jav
> > a:92)
> > at org.apache.cxf.interceptor.BareOutInterceptor.handleMessage(
> > BareOutInterceptor.java:68)
> > at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(
> > PhaseInterceptorChain.java:207)
> > at
> > org.apache.cxf.interceptor.OutgoingChainInterceptor.handleMessage
> > (OutgoingChainInterceptor.java:73)
> > at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(
> > PhaseInterceptorChain.java:207)
> > at org.apache.cxf.transport.ChainInitiationObserver.onMessage(
> > ChainInitiationObserver.java:73)
> > at org.apache.cxf.transport.servlet.ServletDestination.doMessage
> > (
> > ServletDestination.java:78)
> > at
> > org.apache.cxf.transport.servlet.ServletController.invokeDestination(
> > ServletController.java:224)
> > at org.apache.cxf.transport.servlet.ServletController.invoke(
> > ServletController.java:137)
> > at org.apache.cxf.transport.servlet.CXFServlet.invoke (
> > CXFServlet.java:271)
> > at org.apache.cxf.transport.servlet.CXFServlet.doPost(
> > CXFServlet.java:249)
> > at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
> > at javax.servlet.http.HttpServlet.service (HttpServlet.java:803)
> > at
> > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
> > ApplicationFilterChain.java:290)
> > at org.apache.catalina.core.ApplicationFilterChain.doFilter(
> > ApplicationFilterChain.java :206)
> > at org.apache.catalina.core.StandardWrapperValve.invoke(
> > StandardWrapperValve.java:230)
> > at org.apache.catalina.core.StandardContextValve.invoke(
> > StandardContextValve.java:175)
> > at org.apache.catalina.core.StandardHostValve.invoke(
> > StandardHostValve.java:128)
> > at org.apache.catalina.valves.ErrorReportValve.invoke(
> > ErrorReportValve.java:104)
> > at org.apache.catalina.core.StandardEngineValve.invoke (
> > StandardEngineValve.java:109)
> > at org.apache.catalina.connector.CoyoteAdapter.service(
> > CoyoteAdapter.java:261)
> > at org.apache.coyote.http11.Http11Processor.process(
> > Http11Processor.java:844)
> > at
> > org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(
> > Http11Protocol.java:581)
> > at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(
> > JIoEndpoint.java:447)
> > at java.lang.Thread.run(Thread.java:595)
> > Caused by: javax.xml.bind.MarshalException
> >
> >
> > Any suggestions on how to handle my transactions? Should my config
> > above
> > work?
> >
> > One key I've found is for List<Object> return types on my service
> > interface,
> > the ResponseWrapper classname attribute value needed to be the Object
> > type
> > of the list... like below.
> >
> > @WebMethod(operationName = "getAllProducts")
> > @ResponseWrapper(targetNamespace = "
> > http://catalogService.service.gdservices.com",
> > className = "
> > com.gdservices.service.thirdparty.ProductSummary")
> > @WebResult(targetNamespace = "
> > http://catalogService.service.gdservices.com",
> > name = "products")
> > List<ProductSummary> getAllProducts(Long userId, Integer
> > detailLevel)
> > throws ServiceException;
> >
> > This may be in the docs, but I may have overlooked it... may help
> > somebody
> > out though.
> >
> > Thanks for your time.
> >
> >
> > On 7/27/07, Daniel Kulp < [EMAIL PROTECTED]> wrote:
> > >
> > > On Friday 27 July 2007 11:36, Brad Harper wrote:
> > > > CXF:wsdl2java creates the client side version of this object... what
> > > > am I missing so that it'll unmarshalled correctly?
> > >
> > > This is probably also fixed in the latest SNAPSHOT (or by using the
> > > wrappers objects).
> > >
> > > --
> > > J. Daniel Kulp
> > > Principal Engineer
> > > IONA
> > > P: 781-902-8727 C: 508-380-7194
> > > [EMAIL PROTECTED]
> > > http://www.dankulp.com/blog
> > >
> >
>
>
>
> --
> Dan Diephouse
> Envoi Solutions
> http://envoisolutions.com | http://netzooid.com/blog
--
Dan Diephouse
Envoi Solutions
http://envoisolutions.com | http://netzooid.com/blog