OK, I got a Java 5 Proxy to be invoked thru CXF. I had to: 

* Declare an interface for the service class
* Annotate interface with @WebService
* Annotate interface method with @WebMethod, @WebResult, and all the @Web
Param annotations
* Declare a service class that implements the interface
* Annotate class with @WebService. Set the attributes for serviceName and
endpointInterface
* there is _no_ need to add @WebMethod, @WebResult, or @WebParam to the
class
* In the Spring XML: Proxy your class

Thanks, 
Hamlet



dkulp wrote:
> 
> 
> Any chance you could take a simple "hello world" sample or something and 
> create a small test project that completely shows everything?   Its
> definitely 
> easier to see what is going on if I can run it in the debugger.
> 
> Dan
> 
> 
> On Mon September 28 2009 2:16:25 pm HamletDRC wrote:
>> Here is what I added to make Tomcat start up properly:
>> 
>> The SystemParameterService interface is marked with @WebService
>> The SystemParameterServiceImpl class is marked with:
>>   @WebService(serviceName = "SystemParameterService", endpointInterface =
>> "vue.tcsm.services.SystemParameterService")
>>   The class methods are given the proper @WebMethod annotations too.
>> 
>> The WSDL generates now and tomcat starts with no errors. Progress.
>> 
>> But none of the endpoints can be invoked. I get the same old exception:
>> 
>> org.apache.cxf.interceptor.Fault: object is not an instance of declaring
>> class while invoking public void
>> vue.tcsm.services.SiteAvailabilityServiceImpl.createAvailability(vue.tcsm.d
>> to.TestCenterDTO) throws vue.tcsm.failures.ValidationFault with params
>>  [null].
>> 
>> It is thrown from the line :
>>   CastUtils.cast((List)super.invoke(exchange, serviceObject, m, params));
>> in org.apache.cxf.jaxws.JAXWSMethodInvoker
>> 
>> 
>> Any ideas?
>> 
>> --
>> Hamlet
>> 
>> dkulp wrote:
>> > I believe implementorClass  needs to point to the actual Impl class
>> which
>> > would then have the proper @WebService annotation that would have the
>> > endpointInterface attribute defined on it.
>> >
>> > Dan
>> >
>> > On Mon September 28 2009 12:56:11 pm HamletDRC wrote:
>> >> I'm trying to create a standard Java 5 Proxy of my service classes and
>> >>  can't get it to work.
>> >>
>> >> I've tried several approaches, does anyone have any insight about what
>> >> is going wrong?
>> >>
>> >> In both approaches, I'm creating a standard Java 5 Proxy out of the
>> >> service
>> >> class and an InvocationHandler. To make this easy in the Spring config
>> I
>> >> wrote a little type safe Proxy utility:
>> >>
>> >> public class ProxyUtils {
>> >>   public static <T> T makeProxy(InvocationHandler handler, Class<T>
>> >> clazz) {
>> >>           return clazz.cast(
>> >>                   Proxy.newProxyInstance(
>> >>                           clazz.getClassLoader(),
>> >>                           new Class[]{clazz},
>> >>                           handler)
>> >>           );
>> >>   }
>> >> Also, in both approaches there are "SystemParameterService" and
>> >> "SystemParameterServiceImpl" as the service class.
>> >>
>> >> Approach #1 - Define an "implementorClass" on jaxws:endpoint - Results
>> >> in error "java.lang.IllegalArgumentException: object is not an
>> instance
>> >> of declaring class" error.
>> >>
>> >> I defined my endpoint with an implementorClass like so:
>> >>   <jaxws:endpoint id="systemParameter"
>> >>                                   implementor="#systemParameterService"
>> >>                                   
>> >> implementorClass="vue.tcsm.services.SystemParameterService"
>> >>                                   address="/SystemParameterService">
>> >>   </jaxws:endpoint>
>> >>
>> >> Then I just created a proxy of the service class:
>> >>   <bean id="systemParameterService" scope="prototype"
>> >> class="vue.tcsm.services.ProxyUtils" factory-method="makeProxy">
>> >>           <constructor-arg>
>> >>                   <bean 
>> >> class="vue.tcsm.services.VueSystemAppUserBeforeAdvice"
>> >> scope="prototype">
>> >>                           <constructor-arg>
>> >>                                   <bean 
>> >> class="vue.tcsm.services.SystemParameterServiceImpl"
>> >> scope="prototype"/>
>> >>                           </constructor-arg>
>> >>                   </bean>
>> >>           </constructor-arg>
>> >>           <constructor-arg 
>> >> value="vue.tcsm.services.SystemParameterService" />
>> >>   </bean>
>> >>
>> >> The Exception comes out of JAXWSMethodInvoker and kind of makes sense.
>> >> The
>> >> service class is a Proxy and not a SystemParameterService, so I
>> >> understand
>> >> the message. Is there a way to make this approach work?
>> >>
>> >> Approach #2 - Don't Define an "implementorClass" - results in
>> >> "org.apache.cxf.interceptor.Fault: Message part
>> {http://cxf.example/}xxx
>> >>  was not recognized.  (Does it exist in service WSDL?)"
>> >>
>> >> In this approach I simply dropped off the "implementorClass"
>> attribute.
>> >>  This results in the WSDL not being generated correctly and this
>> >> exception.
>> >>
>> >>
>> >> Is there a way to use Java 5 Proxy with CXF?
>> >>
>> >> Thanks,
>> >>
>> >>
>> >>
>> >>
>> >> -----
>> >> --
>> >> Hamlet D'Arcy
>> 
>> -----
>> --
>> Hamlet D'Arcy
>> 
> 
> -- 
> Daniel Kulp
> [email protected]
> http://www.dankulp.com/blog
> 
> 


-----
--
Hamlet D'Arcy

-- 
View this message in context: 
http://www.nabble.com/Can%27t-Proxy-Service-classes-tp25648984p25653674.html
Sent from the cxf-user mailing list archive at Nabble.com.

Reply via email to