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.dto.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
>>
>
> --
> 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-tp25648984p25650292.html
Sent from the cxf-user mailing list archive at Nabble.com.