You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cxf.apache.org by Joe Sunday <su...@csh.rit.edu> on 2007/08/30 08:44:08 UTC

Schema for namespace 'http://localhost/Service already contains type 'foo

I'm trying to migrate an existing framework from Xfire over to CXF  
(2.0.1 and tonight's 2.1 snapshot), and I can't get it to play nice.

There's a core framework that exports a web service interface of a  
few methods. We have an additional application that builds on top of  
that with it's own interface:

@WebService(...)
public interface CoreService {
     @WebMethod(...)
     Foo foo(...)
}

@WebService(...)
public interface AppService {
     @WebMethod
      ServiceResult methodOne(...)

     @WebMethod
     ServiceResult methodTwo(...)
}

Then we aggregate them together with a new interface that we actually  
want exported:
@WebService(name = "MyService", targetNamespace = "http://localhost/ 
Service")
public interface PublicService extends CoreService, AppService {
}

Actually implementing methodXXX is handled by a JDK proxy class  
created by a factory in Spring that implements PublicService and the  
InvocationHandler maps them back to the right implementation. There  
is no actual Impl class to speak of.

If I setup my endpoint like this:
	<jaxws:endpoint
		  id="helloWorld"
		  implementor="#publicServiceProxy"
		  address="/SnapManager" />

I get this during startup:
org.springframework.beans.factory.BeanCreationException: Error  
creating bean with name 'helloWorld': Invocation of init method  
failed; nested except
ion is java.lang.RuntimeException: Schema for namespace 'http:// 
localhost/Service' already contains type 'foo
Caused by:
java.lang.RuntimeException: Schema for namespace 'http://localhost/ 
Service' already contains type 'foo
         at org.apache.ws.commons.schema.XmlSchema.addType 
(XmlSchema.java:229)
         at  
org.apache.cxf.service.factory.ReflectionServiceFactoryBean.createWrappe 
dMessageSchema(ReflectionServiceFactoryBean.java:660)
         at  
org.apache.cxf.service.factory.ReflectionServiceFactoryBean.createWrappe 
dSchema(ReflectionServiceFactoryBean.java:511)
         at  
org.apache.cxf.service.factory.ReflectionServiceFactoryBean.initializeWr 
appedSchema(ReflectionServiceFactoryBean.java:430)
         at  
org.apache.cxf.service.factory.ReflectionServiceFactoryBean.buildService 
FromClass(ReflectionServiceFactoryBean.java:240)
         at  
org.apache.cxf.service.factory.ReflectionServiceFactoryBean.initializeSe 
rviceModel(ReflectionServiceFactoryBean.java:264)
         at  
org.apache.cxf.service.factory.ReflectionServiceFactoryBean.create 
(ReflectionServiceFactoryBean.java:143)
         at  
org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.create 
(JaxWsServiceFactoryBean.java:89)
         at  
org.apache.cxf.frontend.AbstractEndpointFactory.createEndpoint 
(AbstractEndpointFactory.java:82)
         at org.apache.cxf.frontend.ServerFactoryBean.create 
(ServerFactoryBean.java:107)
         at org.apache.cxf.jaxws.JaxWsServerFactoryBean.create 
(JaxWsServerFactoryBean.java:147)
         at org.apache.cxf.jaxws.EndpointImpl.getServer 
(EndpointImpl.java:287)
         at org.apache.cxf.jaxws.EndpointImpl.doPublish 
(EndpointImpl.java:227)
         at org.apache.cxf.jaxws.EndpointImpl.publish 
(EndpointImpl.java:179)
         at org.apache.cxf.jaxws.EndpointImpl.publish 
(EndpointImpl.java:340)
         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
         at sun.reflect.NativeMethodAccessorImpl.invoke 
(NativeMethodAccessorImpl.java:39)
         at sun.reflect.DelegatingMethodAccessorImpl.invoke 
(DelegatingMethodAccessorImpl.java:25)
         at java.lang.reflect.Method.invoke(Method.java:585)

I tried giving it a class to find the annotations on as well (though  
I didn't need this in XFire, it just read off the Interface correctly):
@WebService(endpointInterface = "com.myapp.PublicService")
public abstract class PublicServiceFake implements PublicService {
}

and pointing the endpoint to it in Spring:
	          implementorClass="com.myapp.SnapManagerServiceFake"

with the same result. If I remove the "implements PublicService"  
part, it'll startup, but then the generated wsdl doesn't actually  
have any methods in it.

In XFire, my config looked like this (publicServiceProxy:

   <bean name="xfire.annotationServiceFactory"  
class="org.codehaus.xfire.annotations.AnnotationServiceFactory">
     <constructor-arg index="0">
       <bean  
class="org.codehaus.xfire.annotations.jsr181.Jsr181WebAnnotations" />
     </constructor-arg>
     <constructor-arg index="1" ref="xfire.transportManager" />
   </bean>

   <bean name="myService"  
class="org.codehaus.xfire.spring.remoting.XFireExporter">
     <property name="serviceBean" ref="publicServiceProxy" />
     <property name="serviceInterface"  
value="com.myapp.PublicService" />
     <property name="serviceFactory"  
ref="xfire.annotationServiceFactory"/>
     <property name="xfire" ref="xfire"/>
     <property name="properties"> <!-- This property is needed to  
allow eclipse tools to properly validate  the WSDL file -->
       <map>
         <entry>
           <key>
             <value>wsdlBuilder.generateImports</value>
           </key>
           <value>true</value>
         </entry>
       </map>
     </property>
   </bean>
--Joe


Re: Broken SESSION_MAINTAIN_PROPERTY against non-jaxws servers

Posted by Willem Jiang <ni...@iona.com>.
Hi Joe,

Yes, CXF leverage the Jetty's session support to implement the session 
maintaining. But I am not sure it just tracks the JSESSIONID.
You can create a JIRA [1] and attach the patch with it.

[1] http://issues.apache.org/jira/browse/CXF

Willem.

Joe Sunday wrote:
> As a followup, I've got a patch for 2.0.1 that tracks all cookies if 
> SESSION_MAINTAIN_PROPERTY is set. I just need to clean it up a bit and 
> let me know where to send it.
>
> It doesn't follow all the RFC rules for host / domain / path security, 
> but then again neither does the current code, and I'm not sure it 
> matters in this case anyway.
>
> --Joe
>
> On Sep 1, 2007, at 1:06 AM, Joe Sunday wrote:
>
>> It looks like CXF only tracks JSESSIONID and throws away any other 
>> cookies.
>>
>> There's a bunch of non-java based services out there that use other 
>> session cookies. If SESSION_MAINTAIN_PROPERTY is set, it should track 
>> all the cookies on the session, not just JSESSIONID.
>>
>> --Joe
>

Re: Broken SESSION_MAINTAIN_PROPERTY against non-jaxws servers

Posted by Joe Sunday <su...@csh.rit.edu>.
As a followup, I've got a patch for 2.0.1 that tracks all cookies if  
SESSION_MAINTAIN_PROPERTY is set. I just need to clean it up a bit  
and let me know where to send it.

It doesn't follow all the RFC rules for host / domain / path  
security, but then again neither does the current code, and I'm not  
sure it matters in this case anyway.

--Joe

On Sep 1, 2007, at 1:06 AM, Joe Sunday wrote:

> It looks like CXF only tracks JSESSIONID and throws away any other  
> cookies.
>
> There's a bunch of non-java based services out there that use other  
> session cookies. If SESSION_MAINTAIN_PROPERTY is set, it should  
> track all the cookies on the session, not just JSESSIONID.
>
> --Joe

Broken SESSION_MAINTAIN_PROPERTY against non-jaxws servers

Posted by Joe Sunday <su...@csh.rit.edu>.
It looks like CXF only tracks JSESSIONID and throws away any other  
cookies.

There's a bunch of non-java based services out there that use other  
session cookies. If SESSION_MAINTAIN_PROPERTY is set, it should track  
all the cookies on the session, not just JSESSIONID.

--Joe

On Aug 31, 2007, at 6:12 PM, Joe Sunday wrote:

> Thanks a bunch.
>
> One more question.. Is there a way to keep cookies automatically on  
> a session?
>
> The remote end is sending a Set-Cookie: header on the first  
> request, but it doesn't get sent back in future requests.
> I thought this was right from some googling, but it doesn't seem to  
> work..
> ((BindingProvider)client).getRequestContext().put 
> (BindingProvider.SESSION_MAINTAIN_PROPERTY, true);
>
> --Joe
>
> On Aug 31, 2007, at 2:17 PM, Daniel Kulp wrote:


Re: Schema for namespace 'http://localhost/Service already contains type 'foo

Posted by Joe Sunday <su...@csh.rit.edu>.
Thanks a bunch.

One more question.. Is there a way to keep cookies automatically on a  
session?

The remote end is sending a Set-Cookie: header on the first request,  
but it doesn't get sent back in future requests.
I thought this was right from some googling, but it doesn't seem to  
work..
((BindingProvider)client).getRequestContext().put 
(BindingProvider.SESSION_MAINTAIN_PROPERTY, true);

--Joe

On Aug 31, 2007, at 2:17 PM, Daniel Kulp wrote:

>
> Just FYI:  I can reproduce this.   I'm working on a fix now.
>
> Dan
>
>
>
> On Friday 31 August 2007, Joe Sunday wrote:
>> Actually, in the end, I did switch back to jaxb and option 2 to
>> change Foo to something else. The aegis binding was having some other
>> issues with multiple namespaces in the wsdl files it generated I need
>> to distill into a test case (It works with more or less the same
>> structure in XFire though)
>>
>> I'm still having an issue with combining interfaces using CXF though
>> that's problematic on the client side.
>>
>> If I do the CoreService, AppService, and PublicService as defined
>> below, XFire could take PublicService and a JDK proxy object and
>> construct all the correct methods. On the server, I can create an
>> abstract fake class and pass it as the implementorClass which seems
>> to work:
>> @WebService(endpointInterface="package.PublicService", ...)
>> public abstract class PublicServiceFake implements PublicService { }
>>
>> On the client, if I try to create a client based on PublicService, it
>> finds and can invoke the methods on CoreService, but throws an error
>> it can't find information on methodOne when I try to invoke it.
>> (Sorry, don't have the stack trace in front of me right now.. I can
>> recreate it sometime later today) All the methods on all interfaces
>> are annotated with @WebMethod and @WebParam annotations.
>>
>> If I do "AppService extends CoreService" and then configure an
>> AppService, I get the same result. If I then do "PublicService
>> extends AppService" (instead of "PublicService extends CoreService,
>> AppService), it works on the client but seems clunky that it can't
>> properly find all the WebMethod functions on the multiple direct
>> child interface case. In some cases, we have PublicService extending
>> 3 or more child interfaces depending on the app, but it only finds
>> methods in the first child interface.
>>
>> This is in both 2.0.1 and yesterday's 2.1 snapshot.
>>
>> --Joe
>>
>> On Aug 31, 2007, at 1:00 PM, Daniel Kulp wrote:
>>> Other options would be:
>>>
>>> 1) add @WebMethod(name = "fooOperation") to the operation (to
>>> generate the wrapper element with that name
>>>
>>> 2) change/remove the @XmlRootElement annotation in the "Foo" class
>>> to make it not generate a Foo element.   (may need to combine with
>>> 3)
>>>
>>> 3) add @WebResult annotation with a name set to "FooResult" or
>>> something
>>> to give it a unique name.
>>>
>>> Dan
>>>
>>> On Thursday 30 August 2007, Joe Sunday wrote:
>>>> As an update to this after spending some more time trying to unwind
>>>> it...
>>>>
>>>> It appears the problem was actually due to a method in one of my
>>>> interfaces:
>>>> Foo foo(...)
>>>>
>>>> JAXB would collide the Foo type and the foo method. Setting up an
>>>> Aegis binding instead seems to have cleared it up.
>>>>
>>>> --Joe
>>>>
>>>> On Aug 30, 2007, at 2:44 AM, Joe Sunday wrote:
>>>>> I'm trying to migrate an existing framework from Xfire over to CXF
>>>>> (2.0.1 and tonight's 2.1 snapshot), and I can't get it to play
>>>>> nice.
>>>>>
>>>>> There's a core framework that exports a web service interface of a
>>>>> few methods. We have an additional application that builds on top
>>>>> of that with it's own interface:
>>>>>
>>>>> @WebService(...)
>>>>> public interface CoreService {
>>>>>     @WebMethod(...)
>>>>>     Foo foo(...)
>>>>> }
>>>>>
>>>>> @WebService(...)
>>>>> public interface AppService {
>>>>>     @WebMethod
>>>>>      ServiceResult methodOne(...)
>>>>>
>>>>>     @WebMethod
>>>>>     ServiceResult methodTwo(...)
>>>>> }
>>>>>
>>>>> Then we aggregate them together with a new interface that we
>>>>> actually want exported:
>>>>> @WebService(name = "MyService", targetNamespace =
>>>>> "http://localhost/ Service")
>>>>> public interface PublicService extends CoreService, AppService {
>>>>> }
>>>>>
>>>>> Actually implementing methodXXX is handled by a JDK proxy class
>>>>> created by a factory in Spring that implements PublicService and
>>>>> the InvocationHandler maps them back to the right implementation.
>>>>> There is no actual Impl class to speak of.
>>>>>
>>>>> If I setup my endpoint like this:
>>>>> 	<jaxws:endpoint
>>>>> 		  id="helloWorld"
>>>>> 		  implementor="#publicServiceProxy"
>>>>> 		  address="/SnapManager" />
>>>>>
>>>>> I get this during startup:
>>>>> org.springframework.beans.factory.BeanCreationException: Error
>>>>> creating bean with name 'helloWorld': Invocation of init method
>>>>> failed; nested except
>>>>> ion is java.lang.RuntimeException: Schema for namespace 'http://
>>>>> localhost/Service' already contains type 'foo
>>>>> Caused by:
>>>>> java.lang.RuntimeException: Schema for namespace
>>>>> 'http://localhost/ Service' already contains type 'foo
>>>>>         at org.apache.ws.commons.schema.XmlSchema.addType
>>>>> (XmlSchema.java:229)
>>>>>         at
>>>>> org.apache.cxf.service.factory.ReflectionServiceFactoryBean.create
>>>>> Wr ap pedMessageSchema(ReflectionServiceFactoryBean.java:660) at
>>>>> org.apache.cxf.service.factory.ReflectionServiceFactoryBean.create
>>>>> Wr ap pedSchema(ReflectionServiceFactoryBean.java:511)
>>>>>         at
>>>>> org.apache.cxf.service.factory.ReflectionServiceFactoryBean.initia
>>>>> li ze WrappedSchema(ReflectionServiceFactoryBean.java:430)
>>>>>         at
>>>>> org.apache.cxf.service.factory.ReflectionServiceFactoryBean.buildS
>>>>> er vi ceFromClass(ReflectionServiceFactoryBean.java:240)
>>>>>         at
>>>>> org.apache.cxf.service.factory.ReflectionServiceFactoryBean.initia
>>>>> li ze ServiceModel(ReflectionServiceFactoryBean.java:264)
>>>>>         at
>>>>> org.apache.cxf.service.factory.ReflectionServiceFactoryBean.create
>>>>> (ReflectionServiceFactoryBean.java:143)
>>>>>         at
>>>>> org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.create
>>>>> (JaxWsServiceFactoryBean.java:89)
>>>>>         at
>>>>> org.apache.cxf.frontend.AbstractEndpointFactory.createEndpoint
>>>>> (AbstractEndpointFactory.java:82)
>>>>>         at org.apache.cxf.frontend.ServerFactoryBean.create
>>>>> (ServerFactoryBean.java:107)
>>>>>         at org.apache.cxf.jaxws.JaxWsServerFactoryBean.create
>>>>> (JaxWsServerFactoryBean.java:147)
>>>>>         at org.apache.cxf.jaxws.EndpointImpl.getServer
>>>>> (EndpointImpl.java:287)
>>>>>         at org.apache.cxf.jaxws.EndpointImpl.doPublish
>>>>> (EndpointImpl.java:227)
>>>>>         at org.apache.cxf.jaxws.EndpointImpl.publish
>>>>> (EndpointImpl.java:179)
>>>>>         at org.apache.cxf.jaxws.EndpointImpl.publish
>>>>> (EndpointImpl.java:340)
>>>>>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
>>>>> Method) at sun.reflect.NativeMethodAccessorImpl.invoke
>>>>> (NativeMethodAccessorImpl.java:39)
>>>>>         at sun.reflect.DelegatingMethodAccessorImpl.invoke
>>>>> (DelegatingMethodAccessorImpl.java:25)
>>>>>         at java.lang.reflect.Method.invoke(Method.java:585)
>>>>>
>>>>> I tried giving it a class to find the annotations on as well
>>>>> (though I didn't need this in XFire, it just read off the
>>>>> Interface correctly):
>>>>> @WebService(endpointInterface = "com.myapp.PublicService")
>>>>> public abstract class PublicServiceFake implements PublicService {
>>>>> }
>>>>>
>>>>> and pointing the endpoint to it in Spring:
>>>>> 	          implementorClass="com.myapp.SnapManagerServiceFake"
>>>>>
>>>>> with the same result. If I remove the "implements PublicService"
>>>>> part, it'll startup, but then the generated wsdl doesn't actually
>>>>> have any methods in it.
>>>>>
>>>>> In XFire, my config looked like this (publicServiceProxy:
>>>>>
>>>>>   <bean name="xfire.annotationServiceFactory"
>>>>> class="org.codehaus.xfire.annotations.AnnotationServiceFactory">
>>>>>     <constructor-arg index="0">
>>>>>       <bean
>>>>> class="org.codehaus.xfire.annotations.jsr181.Jsr181WebAnnotations"
>>>>> /> </constructor-arg>
>>>>>     <constructor-arg index="1" ref="xfire.transportManager" />
>>>>>   </bean>
>>>>>
>>>>>   <bean name="myService"
>>>>> class="org.codehaus.xfire.spring.remoting.XFireExporter">
>>>>>     <property name="serviceBean" ref="publicServiceProxy" />
>>>>>     <property name="serviceInterface"
>>>>> value="com.myapp.PublicService" />
>>>>>     <property name="serviceFactory"
>>>>> ref="xfire.annotationServiceFactory"/>
>>>>>     <property name="xfire" ref="xfire"/>
>>>>>     <property name="properties"> <!-- This property is needed to
>>>>> allow eclipse tools to properly validate  the WSDL file -->
>>>>>       <map>
>>>>>         <entry>
>>>>>           <key>
>>>>>             <value>wsdlBuilder.generateImports</value>
>>>>>           </key>
>>>>>           <value>true</value>
>>>>>         </entry>
>>>>>       </map>
>>>>>     </property>
>>>>>   </bean>
>>>>> --Joe
>>>
>>> --
>>> J. Daniel Kulp
>>> Principal Engineer
>>> IONA
>>> P: 781-902-8727    C: 508-380-7194
>>> daniel.kulp@iona.com
>>> http://www.dankulp.com/blog
>
>
>
> -- 
> J. Daniel Kulp
> Principal Engineer
> IONA
> P: 781-902-8727    C: 508-380-7194
> daniel.kulp@iona.com
> http://www.dankulp.com/blog


Re: Schema for namespace 'http://localhost/Service already contains type 'foo

Posted by Daniel Kulp <dk...@apache.org>.
Just FYI:  I can reproduce this.   I'm working on a fix now.

Dan



On Friday 31 August 2007, Joe Sunday wrote:
> Actually, in the end, I did switch back to jaxb and option 2 to
> change Foo to something else. The aegis binding was having some other
> issues with multiple namespaces in the wsdl files it generated I need
> to distill into a test case (It works with more or less the same
> structure in XFire though)
>
> I'm still having an issue with combining interfaces using CXF though
> that's problematic on the client side.
>
> If I do the CoreService, AppService, and PublicService as defined
> below, XFire could take PublicService and a JDK proxy object and
> construct all the correct methods. On the server, I can create an
> abstract fake class and pass it as the implementorClass which seems
> to work:
> @WebService(endpointInterface="package.PublicService", ...)
> public abstract class PublicServiceFake implements PublicService { }
>
> On the client, if I try to create a client based on PublicService, it
> finds and can invoke the methods on CoreService, but throws an error
> it can't find information on methodOne when I try to invoke it.
> (Sorry, don't have the stack trace in front of me right now.. I can
> recreate it sometime later today) All the methods on all interfaces
> are annotated with @WebMethod and @WebParam annotations.
>
> If I do "AppService extends CoreService" and then configure an
> AppService, I get the same result. If I then do "PublicService
> extends AppService" (instead of "PublicService extends CoreService,
> AppService), it works on the client but seems clunky that it can't
> properly find all the WebMethod functions on the multiple direct
> child interface case. In some cases, we have PublicService extending
> 3 or more child interfaces depending on the app, but it only finds
> methods in the first child interface.
>
> This is in both 2.0.1 and yesterday's 2.1 snapshot.
>
> --Joe
>
> On Aug 31, 2007, at 1:00 PM, Daniel Kulp wrote:
> > Other options would be:
> >
> > 1) add @WebMethod(name = "fooOperation") to the operation (to
> > generate the wrapper element with that name
> >
> > 2) change/remove the @XmlRootElement annotation in the "Foo" class
> > to make it not generate a Foo element.   (may need to combine with
> > 3)
> >
> > 3) add @WebResult annotation with a name set to "FooResult" or
> > something
> > to give it a unique name.
> >
> > Dan
> >
> > On Thursday 30 August 2007, Joe Sunday wrote:
> >> As an update to this after spending some more time trying to unwind
> >> it...
> >>
> >> It appears the problem was actually due to a method in one of my
> >> interfaces:
> >> Foo foo(...)
> >>
> >> JAXB would collide the Foo type and the foo method. Setting up an
> >> Aegis binding instead seems to have cleared it up.
> >>
> >> --Joe
> >>
> >> On Aug 30, 2007, at 2:44 AM, Joe Sunday wrote:
> >>> I'm trying to migrate an existing framework from Xfire over to CXF
> >>> (2.0.1 and tonight's 2.1 snapshot), and I can't get it to play
> >>> nice.
> >>>
> >>> There's a core framework that exports a web service interface of a
> >>> few methods. We have an additional application that builds on top
> >>> of that with it's own interface:
> >>>
> >>> @WebService(...)
> >>> public interface CoreService {
> >>>     @WebMethod(...)
> >>>     Foo foo(...)
> >>> }
> >>>
> >>> @WebService(...)
> >>> public interface AppService {
> >>>     @WebMethod
> >>>      ServiceResult methodOne(...)
> >>>
> >>>     @WebMethod
> >>>     ServiceResult methodTwo(...)
> >>> }
> >>>
> >>> Then we aggregate them together with a new interface that we
> >>> actually want exported:
> >>> @WebService(name = "MyService", targetNamespace =
> >>> "http://localhost/ Service")
> >>> public interface PublicService extends CoreService, AppService {
> >>> }
> >>>
> >>> Actually implementing methodXXX is handled by a JDK proxy class
> >>> created by a factory in Spring that implements PublicService and
> >>> the InvocationHandler maps them back to the right implementation.
> >>> There is no actual Impl class to speak of.
> >>>
> >>> If I setup my endpoint like this:
> >>> 	<jaxws:endpoint
> >>> 		  id="helloWorld"
> >>> 		  implementor="#publicServiceProxy"
> >>> 		  address="/SnapManager" />
> >>>
> >>> I get this during startup:
> >>> org.springframework.beans.factory.BeanCreationException: Error
> >>> creating bean with name 'helloWorld': Invocation of init method
> >>> failed; nested except
> >>> ion is java.lang.RuntimeException: Schema for namespace 'http://
> >>> localhost/Service' already contains type 'foo
> >>> Caused by:
> >>> java.lang.RuntimeException: Schema for namespace
> >>> 'http://localhost/ Service' already contains type 'foo
> >>>         at org.apache.ws.commons.schema.XmlSchema.addType
> >>> (XmlSchema.java:229)
> >>>         at
> >>> org.apache.cxf.service.factory.ReflectionServiceFactoryBean.create
> >>>Wr ap pedMessageSchema(ReflectionServiceFactoryBean.java:660) at
> >>> org.apache.cxf.service.factory.ReflectionServiceFactoryBean.create
> >>>Wr ap pedSchema(ReflectionServiceFactoryBean.java:511)
> >>>         at
> >>> org.apache.cxf.service.factory.ReflectionServiceFactoryBean.initia
> >>>li ze WrappedSchema(ReflectionServiceFactoryBean.java:430)
> >>>         at
> >>> org.apache.cxf.service.factory.ReflectionServiceFactoryBean.buildS
> >>>er vi ceFromClass(ReflectionServiceFactoryBean.java:240)
> >>>         at
> >>> org.apache.cxf.service.factory.ReflectionServiceFactoryBean.initia
> >>>li ze ServiceModel(ReflectionServiceFactoryBean.java:264)
> >>>         at
> >>> org.apache.cxf.service.factory.ReflectionServiceFactoryBean.create
> >>> (ReflectionServiceFactoryBean.java:143)
> >>>         at
> >>> org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.create
> >>> (JaxWsServiceFactoryBean.java:89)
> >>>         at
> >>> org.apache.cxf.frontend.AbstractEndpointFactory.createEndpoint
> >>> (AbstractEndpointFactory.java:82)
> >>>         at org.apache.cxf.frontend.ServerFactoryBean.create
> >>> (ServerFactoryBean.java:107)
> >>>         at org.apache.cxf.jaxws.JaxWsServerFactoryBean.create
> >>> (JaxWsServerFactoryBean.java:147)
> >>>         at org.apache.cxf.jaxws.EndpointImpl.getServer
> >>> (EndpointImpl.java:287)
> >>>         at org.apache.cxf.jaxws.EndpointImpl.doPublish
> >>> (EndpointImpl.java:227)
> >>>         at org.apache.cxf.jaxws.EndpointImpl.publish
> >>> (EndpointImpl.java:179)
> >>>         at org.apache.cxf.jaxws.EndpointImpl.publish
> >>> (EndpointImpl.java:340)
> >>>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
> >>> Method) at sun.reflect.NativeMethodAccessorImpl.invoke
> >>> (NativeMethodAccessorImpl.java:39)
> >>>         at sun.reflect.DelegatingMethodAccessorImpl.invoke
> >>> (DelegatingMethodAccessorImpl.java:25)
> >>>         at java.lang.reflect.Method.invoke(Method.java:585)
> >>>
> >>> I tried giving it a class to find the annotations on as well
> >>> (though I didn't need this in XFire, it just read off the
> >>> Interface correctly):
> >>> @WebService(endpointInterface = "com.myapp.PublicService")
> >>> public abstract class PublicServiceFake implements PublicService {
> >>> }
> >>>
> >>> and pointing the endpoint to it in Spring:
> >>> 	          implementorClass="com.myapp.SnapManagerServiceFake"
> >>>
> >>> with the same result. If I remove the "implements PublicService"
> >>> part, it'll startup, but then the generated wsdl doesn't actually
> >>> have any methods in it.
> >>>
> >>> In XFire, my config looked like this (publicServiceProxy:
> >>>
> >>>   <bean name="xfire.annotationServiceFactory"
> >>> class="org.codehaus.xfire.annotations.AnnotationServiceFactory">
> >>>     <constructor-arg index="0">
> >>>       <bean
> >>> class="org.codehaus.xfire.annotations.jsr181.Jsr181WebAnnotations"
> >>> /> </constructor-arg>
> >>>     <constructor-arg index="1" ref="xfire.transportManager" />
> >>>   </bean>
> >>>
> >>>   <bean name="myService"
> >>> class="org.codehaus.xfire.spring.remoting.XFireExporter">
> >>>     <property name="serviceBean" ref="publicServiceProxy" />
> >>>     <property name="serviceInterface"
> >>> value="com.myapp.PublicService" />
> >>>     <property name="serviceFactory"
> >>> ref="xfire.annotationServiceFactory"/>
> >>>     <property name="xfire" ref="xfire"/>
> >>>     <property name="properties"> <!-- This property is needed to
> >>> allow eclipse tools to properly validate  the WSDL file -->
> >>>       <map>
> >>>         <entry>
> >>>           <key>
> >>>             <value>wsdlBuilder.generateImports</value>
> >>>           </key>
> >>>           <value>true</value>
> >>>         </entry>
> >>>       </map>
> >>>     </property>
> >>>   </bean>
> >>> --Joe
> >
> > --
> > J. Daniel Kulp
> > Principal Engineer
> > IONA
> > P: 781-902-8727    C: 508-380-7194
> > daniel.kulp@iona.com
> > http://www.dankulp.com/blog



-- 
J. Daniel Kulp
Principal Engineer
IONA
P: 781-902-8727    C: 508-380-7194
daniel.kulp@iona.com
http://www.dankulp.com/blog

Re: Schema for namespace 'http://localhost/Service already contains type 'foo

Posted by Joe Sunday <su...@csh.rit.edu>.
Actually, in the end, I did switch back to jaxb and option 2 to  
change Foo to something else. The aegis binding was having some other  
issues with multiple namespaces in the wsdl files it generated I need  
to distill into a test case (It works with more or less the same  
structure in XFire though)

I'm still having an issue with combining interfaces using CXF though  
that's problematic on the client side.

If I do the CoreService, AppService, and PublicService as defined  
below, XFire could take PublicService and a JDK proxy object and  
construct all the correct methods. On the server, I can create an  
abstract fake class and pass it as the implementorClass which seems  
to work:
@WebService(endpointInterface="package.PublicService", ...)
public abstract class PublicServiceFake implements PublicService { }

On the client, if I try to create a client based on PublicService, it  
finds and can invoke the methods on CoreService, but throws an error  
it can't find information on methodOne when I try to invoke it.  
(Sorry, don't have the stack trace in front of me right now.. I can  
recreate it sometime later today) All the methods on all interfaces  
are annotated with @WebMethod and @WebParam annotations.

If I do "AppService extends CoreService" and then configure an  
AppService, I get the same result. If I then do "PublicService  
extends AppService" (instead of "PublicService extends CoreService,  
AppService), it works on the client but seems clunky that it can't  
properly find all the WebMethod functions on the multiple direct  
child interface case. In some cases, we have PublicService extending  
3 or more child interfaces depending on the app, but it only finds  
methods in the first child interface.

This is in both 2.0.1 and yesterday's 2.1 snapshot.

--Joe

On Aug 31, 2007, at 1:00 PM, Daniel Kulp wrote:

>
> Other options would be:
>
> 1) add @WebMethod(name = "fooOperation") to the operation (to generate
> the wrapper element with that name
>
> 2) change/remove the @XmlRootElement annotation in the "Foo" class to
> make it not generate a Foo element.   (may need to combine with 3)
>
> 3) add @WebResult annotation with a name set to "FooResult" or  
> something
> to give it a unique name.
>
> Dan
>
>
> On Thursday 30 August 2007, Joe Sunday wrote:
>> As an update to this after spending some more time trying to unwind
>> it...
>>
>> It appears the problem was actually due to a method in one of my
>> interfaces:
>> Foo foo(...)
>>
>> JAXB would collide the Foo type and the foo method. Setting up an
>> Aegis binding instead seems to have cleared it up.
>>
>> --Joe
>>
>> On Aug 30, 2007, at 2:44 AM, Joe Sunday wrote:
>>> I'm trying to migrate an existing framework from Xfire over to CXF
>>> (2.0.1 and tonight's 2.1 snapshot), and I can't get it to play nice.
>>>
>>> There's a core framework that exports a web service interface of a
>>> few methods. We have an additional application that builds on top
>>> of that with it's own interface:
>>>
>>> @WebService(...)
>>> public interface CoreService {
>>>     @WebMethod(...)
>>>     Foo foo(...)
>>> }
>>>
>>> @WebService(...)
>>> public interface AppService {
>>>     @WebMethod
>>>      ServiceResult methodOne(...)
>>>
>>>     @WebMethod
>>>     ServiceResult methodTwo(...)
>>> }
>>>
>>> Then we aggregate them together with a new interface that we
>>> actually want exported:
>>> @WebService(name = "MyService", targetNamespace = "http://localhost/
>>> Service")
>>> public interface PublicService extends CoreService, AppService {
>>> }
>>>
>>> Actually implementing methodXXX is handled by a JDK proxy class
>>> created by a factory in Spring that implements PublicService and
>>> the InvocationHandler maps them back to the right implementation.
>>> There is no actual Impl class to speak of.
>>>
>>> If I setup my endpoint like this:
>>> 	<jaxws:endpoint
>>> 		  id="helloWorld"
>>> 		  implementor="#publicServiceProxy"
>>> 		  address="/SnapManager" />
>>>
>>> I get this during startup:
>>> org.springframework.beans.factory.BeanCreationException: Error
>>> creating bean with name 'helloWorld': Invocation of init method
>>> failed; nested except
>>> ion is java.lang.RuntimeException: Schema for namespace 'http://
>>> localhost/Service' already contains type 'foo
>>> Caused by:
>>> java.lang.RuntimeException: Schema for namespace 'http://localhost/
>>> Service' already contains type 'foo
>>>         at org.apache.ws.commons.schema.XmlSchema.addType
>>> (XmlSchema.java:229)
>>>         at
>>> org.apache.cxf.service.factory.ReflectionServiceFactoryBean.createWr
>>> ap pedMessageSchema(ReflectionServiceFactoryBean.java:660)
>>>         at
>>> org.apache.cxf.service.factory.ReflectionServiceFactoryBean.createWr
>>> ap pedSchema(ReflectionServiceFactoryBean.java:511)
>>>         at
>>> org.apache.cxf.service.factory.ReflectionServiceFactoryBean.initiali
>>> ze WrappedSchema(ReflectionServiceFactoryBean.java:430)
>>>         at
>>> org.apache.cxf.service.factory.ReflectionServiceFactoryBean.buildSer
>>> vi ceFromClass(ReflectionServiceFactoryBean.java:240)
>>>         at
>>> org.apache.cxf.service.factory.ReflectionServiceFactoryBean.initiali
>>> ze ServiceModel(ReflectionServiceFactoryBean.java:264)
>>>         at
>>> org.apache.cxf.service.factory.ReflectionServiceFactoryBean.create
>>> (ReflectionServiceFactoryBean.java:143)
>>>         at
>>> org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.create
>>> (JaxWsServiceFactoryBean.java:89)
>>>         at
>>> org.apache.cxf.frontend.AbstractEndpointFactory.createEndpoint
>>> (AbstractEndpointFactory.java:82)
>>>         at org.apache.cxf.frontend.ServerFactoryBean.create
>>> (ServerFactoryBean.java:107)
>>>         at org.apache.cxf.jaxws.JaxWsServerFactoryBean.create
>>> (JaxWsServerFactoryBean.java:147)
>>>         at org.apache.cxf.jaxws.EndpointImpl.getServer
>>> (EndpointImpl.java:287)
>>>         at org.apache.cxf.jaxws.EndpointImpl.doPublish
>>> (EndpointImpl.java:227)
>>>         at org.apache.cxf.jaxws.EndpointImpl.publish
>>> (EndpointImpl.java:179)
>>>         at org.apache.cxf.jaxws.EndpointImpl.publish
>>> (EndpointImpl.java:340)
>>>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
>>> Method) at sun.reflect.NativeMethodAccessorImpl.invoke
>>> (NativeMethodAccessorImpl.java:39)
>>>         at sun.reflect.DelegatingMethodAccessorImpl.invoke
>>> (DelegatingMethodAccessorImpl.java:25)
>>>         at java.lang.reflect.Method.invoke(Method.java:585)
>>>
>>> I tried giving it a class to find the annotations on as well
>>> (though I didn't need this in XFire, it just read off the Interface
>>> correctly):
>>> @WebService(endpointInterface = "com.myapp.PublicService")
>>> public abstract class PublicServiceFake implements PublicService {
>>> }
>>>
>>> and pointing the endpoint to it in Spring:
>>> 	          implementorClass="com.myapp.SnapManagerServiceFake"
>>>
>>> with the same result. If I remove the "implements PublicService"
>>> part, it'll startup, but then the generated wsdl doesn't actually
>>> have any methods in it.
>>>
>>> In XFire, my config looked like this (publicServiceProxy:
>>>
>>>   <bean name="xfire.annotationServiceFactory"
>>> class="org.codehaus.xfire.annotations.AnnotationServiceFactory">
>>>     <constructor-arg index="0">
>>>       <bean
>>> class="org.codehaus.xfire.annotations.jsr181.Jsr181WebAnnotations"
>>> /> </constructor-arg>
>>>     <constructor-arg index="1" ref="xfire.transportManager" />
>>>   </bean>
>>>
>>>   <bean name="myService"
>>> class="org.codehaus.xfire.spring.remoting.XFireExporter">
>>>     <property name="serviceBean" ref="publicServiceProxy" />
>>>     <property name="serviceInterface"
>>> value="com.myapp.PublicService" />
>>>     <property name="serviceFactory"
>>> ref="xfire.annotationServiceFactory"/>
>>>     <property name="xfire" ref="xfire"/>
>>>     <property name="properties"> <!-- This property is needed to
>>> allow eclipse tools to properly validate  the WSDL file -->
>>>       <map>
>>>         <entry>
>>>           <key>
>>>             <value>wsdlBuilder.generateImports</value>
>>>           </key>
>>>           <value>true</value>
>>>         </entry>
>>>       </map>
>>>     </property>
>>>   </bean>
>>> --Joe
>
>
>
> -- 
> J. Daniel Kulp
> Principal Engineer
> IONA
> P: 781-902-8727    C: 508-380-7194
> daniel.kulp@iona.com
> http://www.dankulp.com/blog


Re: Schema for namespace 'http://localhost/Service already contains type 'foo

Posted by Daniel Kulp <dk...@apache.org>.
Other options would be:

1) add @WebMethod(name = "fooOperation") to the operation (to generate 
the wrapper element with that name

2) change/remove the @XmlRootElement annotation in the "Foo" class to 
make it not generate a Foo element.   (may need to combine with 3)

3) add @WebResult annotation with a name set to "FooResult" or something 
to give it a unique name.

Dan


On Thursday 30 August 2007, Joe Sunday wrote:
> As an update to this after spending some more time trying to unwind
> it...
>
> It appears the problem was actually due to a method in one of my
> interfaces:
> Foo foo(...)
>
> JAXB would collide the Foo type and the foo method. Setting up an
> Aegis binding instead seems to have cleared it up.
>
> --Joe
>
> On Aug 30, 2007, at 2:44 AM, Joe Sunday wrote:
> > I'm trying to migrate an existing framework from Xfire over to CXF
> > (2.0.1 and tonight's 2.1 snapshot), and I can't get it to play nice.
> >
> > There's a core framework that exports a web service interface of a
> > few methods. We have an additional application that builds on top
> > of that with it's own interface:
> >
> > @WebService(...)
> > public interface CoreService {
> >     @WebMethod(...)
> >     Foo foo(...)
> > }
> >
> > @WebService(...)
> > public interface AppService {
> >     @WebMethod
> >      ServiceResult methodOne(...)
> >
> >     @WebMethod
> >     ServiceResult methodTwo(...)
> > }
> >
> > Then we aggregate them together with a new interface that we
> > actually want exported:
> > @WebService(name = "MyService", targetNamespace = "http://localhost/
> > Service")
> > public interface PublicService extends CoreService, AppService {
> > }
> >
> > Actually implementing methodXXX is handled by a JDK proxy class
> > created by a factory in Spring that implements PublicService and
> > the InvocationHandler maps them back to the right implementation.
> > There is no actual Impl class to speak of.
> >
> > If I setup my endpoint like this:
> > 	<jaxws:endpoint
> > 		  id="helloWorld"
> > 		  implementor="#publicServiceProxy"
> > 		  address="/SnapManager" />
> >
> > I get this during startup:
> > org.springframework.beans.factory.BeanCreationException: Error
> > creating bean with name 'helloWorld': Invocation of init method
> > failed; nested except
> > ion is java.lang.RuntimeException: Schema for namespace 'http://
> > localhost/Service' already contains type 'foo
> > Caused by:
> > java.lang.RuntimeException: Schema for namespace 'http://localhost/
> > Service' already contains type 'foo
> >         at org.apache.ws.commons.schema.XmlSchema.addType
> > (XmlSchema.java:229)
> >         at
> > org.apache.cxf.service.factory.ReflectionServiceFactoryBean.createWr
> >ap pedMessageSchema(ReflectionServiceFactoryBean.java:660)
> >         at
> > org.apache.cxf.service.factory.ReflectionServiceFactoryBean.createWr
> >ap pedSchema(ReflectionServiceFactoryBean.java:511)
> >         at
> > org.apache.cxf.service.factory.ReflectionServiceFactoryBean.initiali
> >ze WrappedSchema(ReflectionServiceFactoryBean.java:430)
> >         at
> > org.apache.cxf.service.factory.ReflectionServiceFactoryBean.buildSer
> >vi ceFromClass(ReflectionServiceFactoryBean.java:240)
> >         at
> > org.apache.cxf.service.factory.ReflectionServiceFactoryBean.initiali
> >ze ServiceModel(ReflectionServiceFactoryBean.java:264)
> >         at
> > org.apache.cxf.service.factory.ReflectionServiceFactoryBean.create
> > (ReflectionServiceFactoryBean.java:143)
> >         at
> > org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.create
> > (JaxWsServiceFactoryBean.java:89)
> >         at
> > org.apache.cxf.frontend.AbstractEndpointFactory.createEndpoint
> > (AbstractEndpointFactory.java:82)
> >         at org.apache.cxf.frontend.ServerFactoryBean.create
> > (ServerFactoryBean.java:107)
> >         at org.apache.cxf.jaxws.JaxWsServerFactoryBean.create
> > (JaxWsServerFactoryBean.java:147)
> >         at org.apache.cxf.jaxws.EndpointImpl.getServer
> > (EndpointImpl.java:287)
> >         at org.apache.cxf.jaxws.EndpointImpl.doPublish
> > (EndpointImpl.java:227)
> >         at org.apache.cxf.jaxws.EndpointImpl.publish
> > (EndpointImpl.java:179)
> >         at org.apache.cxf.jaxws.EndpointImpl.publish
> > (EndpointImpl.java:340)
> >         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
> > Method) at sun.reflect.NativeMethodAccessorImpl.invoke
> > (NativeMethodAccessorImpl.java:39)
> >         at sun.reflect.DelegatingMethodAccessorImpl.invoke
> > (DelegatingMethodAccessorImpl.java:25)
> >         at java.lang.reflect.Method.invoke(Method.java:585)
> >
> > I tried giving it a class to find the annotations on as well
> > (though I didn't need this in XFire, it just read off the Interface
> > correctly):
> > @WebService(endpointInterface = "com.myapp.PublicService")
> > public abstract class PublicServiceFake implements PublicService {
> > }
> >
> > and pointing the endpoint to it in Spring:
> > 	          implementorClass="com.myapp.SnapManagerServiceFake"
> >
> > with the same result. If I remove the "implements PublicService"
> > part, it'll startup, but then the generated wsdl doesn't actually
> > have any methods in it.
> >
> > In XFire, my config looked like this (publicServiceProxy:
> >
> >   <bean name="xfire.annotationServiceFactory"
> > class="org.codehaus.xfire.annotations.AnnotationServiceFactory">
> >     <constructor-arg index="0">
> >       <bean
> > class="org.codehaus.xfire.annotations.jsr181.Jsr181WebAnnotations"
> > /> </constructor-arg>
> >     <constructor-arg index="1" ref="xfire.transportManager" />
> >   </bean>
> >
> >   <bean name="myService"
> > class="org.codehaus.xfire.spring.remoting.XFireExporter">
> >     <property name="serviceBean" ref="publicServiceProxy" />
> >     <property name="serviceInterface"
> > value="com.myapp.PublicService" />
> >     <property name="serviceFactory"
> > ref="xfire.annotationServiceFactory"/>
> >     <property name="xfire" ref="xfire"/>
> >     <property name="properties"> <!-- This property is needed to
> > allow eclipse tools to properly validate  the WSDL file -->
> >       <map>
> >         <entry>
> >           <key>
> >             <value>wsdlBuilder.generateImports</value>
> >           </key>
> >           <value>true</value>
> >         </entry>
> >       </map>
> >     </property>
> >   </bean>
> > --Joe



-- 
J. Daniel Kulp
Principal Engineer
IONA
P: 781-902-8727    C: 508-380-7194
daniel.kulp@iona.com
http://www.dankulp.com/blog

Re: Schema for namespace 'http://localhost/Service already contains type 'foo

Posted by Joe Sunday <su...@csh.rit.edu>.
As an update to this after spending some more time trying to unwind  
it...

It appears the problem was actually due to a method in one of my  
interfaces:
Foo foo(...)

JAXB would collide the Foo type and the foo method. Setting up an  
Aegis binding instead seems to have cleared it up.

--Joe

On Aug 30, 2007, at 2:44 AM, Joe Sunday wrote:

> I'm trying to migrate an existing framework from Xfire over to CXF  
> (2.0.1 and tonight's 2.1 snapshot), and I can't get it to play nice.
>
> There's a core framework that exports a web service interface of a  
> few methods. We have an additional application that builds on top  
> of that with it's own interface:
>
> @WebService(...)
> public interface CoreService {
>     @WebMethod(...)
>     Foo foo(...)
> }
>
> @WebService(...)
> public interface AppService {
>     @WebMethod
>      ServiceResult methodOne(...)
>
>     @WebMethod
>     ServiceResult methodTwo(...)
> }
>
> Then we aggregate them together with a new interface that we  
> actually want exported:
> @WebService(name = "MyService", targetNamespace = "http://localhost/ 
> Service")
> public interface PublicService extends CoreService, AppService {
> }
>
> Actually implementing methodXXX is handled by a JDK proxy class  
> created by a factory in Spring that implements PublicService and  
> the InvocationHandler maps them back to the right implementation.  
> There is no actual Impl class to speak of.
>
> If I setup my endpoint like this:
> 	<jaxws:endpoint
> 		  id="helloWorld"
> 		  implementor="#publicServiceProxy"
> 		  address="/SnapManager" />
>
> I get this during startup:
> org.springframework.beans.factory.BeanCreationException: Error  
> creating bean with name 'helloWorld': Invocation of init method  
> failed; nested except
> ion is java.lang.RuntimeException: Schema for namespace 'http:// 
> localhost/Service' already contains type 'foo
> Caused by:
> java.lang.RuntimeException: Schema for namespace 'http://localhost/ 
> Service' already contains type 'foo
>         at org.apache.ws.commons.schema.XmlSchema.addType 
> (XmlSchema.java:229)
>         at  
> org.apache.cxf.service.factory.ReflectionServiceFactoryBean.createWrap 
> pedMessageSchema(ReflectionServiceFactoryBean.java:660)
>         at  
> org.apache.cxf.service.factory.ReflectionServiceFactoryBean.createWrap 
> pedSchema(ReflectionServiceFactoryBean.java:511)
>         at  
> org.apache.cxf.service.factory.ReflectionServiceFactoryBean.initialize 
> WrappedSchema(ReflectionServiceFactoryBean.java:430)
>         at  
> org.apache.cxf.service.factory.ReflectionServiceFactoryBean.buildServi 
> ceFromClass(ReflectionServiceFactoryBean.java:240)
>         at  
> org.apache.cxf.service.factory.ReflectionServiceFactoryBean.initialize 
> ServiceModel(ReflectionServiceFactoryBean.java:264)
>         at  
> org.apache.cxf.service.factory.ReflectionServiceFactoryBean.create 
> (ReflectionServiceFactoryBean.java:143)
>         at  
> org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.create 
> (JaxWsServiceFactoryBean.java:89)
>         at  
> org.apache.cxf.frontend.AbstractEndpointFactory.createEndpoint 
> (AbstractEndpointFactory.java:82)
>         at org.apache.cxf.frontend.ServerFactoryBean.create 
> (ServerFactoryBean.java:107)
>         at org.apache.cxf.jaxws.JaxWsServerFactoryBean.create 
> (JaxWsServerFactoryBean.java:147)
>         at org.apache.cxf.jaxws.EndpointImpl.getServer 
> (EndpointImpl.java:287)
>         at org.apache.cxf.jaxws.EndpointImpl.doPublish 
> (EndpointImpl.java:227)
>         at org.apache.cxf.jaxws.EndpointImpl.publish 
> (EndpointImpl.java:179)
>         at org.apache.cxf.jaxws.EndpointImpl.publish 
> (EndpointImpl.java:340)
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>         at sun.reflect.NativeMethodAccessorImpl.invoke 
> (NativeMethodAccessorImpl.java:39)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke 
> (DelegatingMethodAccessorImpl.java:25)
>         at java.lang.reflect.Method.invoke(Method.java:585)
>
> I tried giving it a class to find the annotations on as well  
> (though I didn't need this in XFire, it just read off the Interface  
> correctly):
> @WebService(endpointInterface = "com.myapp.PublicService")
> public abstract class PublicServiceFake implements PublicService {
> }
>
> and pointing the endpoint to it in Spring:
> 	          implementorClass="com.myapp.SnapManagerServiceFake"
>
> with the same result. If I remove the "implements PublicService"  
> part, it'll startup, but then the generated wsdl doesn't actually  
> have any methods in it.
>
> In XFire, my config looked like this (publicServiceProxy:
>
>   <bean name="xfire.annotationServiceFactory"  
> class="org.codehaus.xfire.annotations.AnnotationServiceFactory">
>     <constructor-arg index="0">
>       <bean  
> class="org.codehaus.xfire.annotations.jsr181.Jsr181WebAnnotations" />
>     </constructor-arg>
>     <constructor-arg index="1" ref="xfire.transportManager" />
>   </bean>
>
>   <bean name="myService"  
> class="org.codehaus.xfire.spring.remoting.XFireExporter">
>     <property name="serviceBean" ref="publicServiceProxy" />
>     <property name="serviceInterface"  
> value="com.myapp.PublicService" />
>     <property name="serviceFactory"  
> ref="xfire.annotationServiceFactory"/>
>     <property name="xfire" ref="xfire"/>
>     <property name="properties"> <!-- This property is needed to  
> allow eclipse tools to properly validate  the WSDL file -->
>       <map>
>         <entry>
>           <key>
>             <value>wsdlBuilder.generateImports</value>
>           </key>
>           <value>true</value>
>         </entry>
>       </map>
>     </property>
>   </bean>
> --Joe