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
> 

-- 
Daniel Kulp
[email protected]
http://www.dankulp.com/blog

Reply via email to