Understood.

In order to keep a consistent (ie. reusable) configuration for the transport I 
have done the following:

Created a file parallel to my services.xml file called transports.xml. This new 
file looks something like this:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans";
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
      xmlns:jee="http://www.springframework.org/schema/jee";
      xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
">

 <bean class="org.codehaus.xfire.spring.config.XFireBean">
   <property name="transports">
     <bean class="org.codehaus.xfire.transport.jms.JMSTransport">
       <constructor-arg ref="xfire"/>
       <constructor-arg ref="wlConnectionFactory"/>
     </bean>
   </property>
 </bean>
</beans>

I then added the following line to the top of my services.xml:


 <import resource="transports.xml"/>

This works on the server side.

On the client side I added transports.xml to the list of files to import into 
my root spring context.

I also wrote up the proxy bean as follows (in a client.xml file):

 <bean id="EchoServiceJmsClient"
       class="com.xyz.xfire.spring.remoting.XFireClientFactoryBean">
         <property name="endpoint">
           <bean class="javax.xml.namespace.QName">
             <constructor-arg value="http://xyz.com/Echo"/>
             <constructor-arg value="EchoJMSEndpoint"/>
           </bean>
         </property>
         <property name="XFire" ref="xfire"/>
         <property name="serviceFactory" ref="xfire.serviceFactory"/>
         <property name="serviceInterface" 
value="com.xyz.service.echo.EchoService"/>
         <property name="wsdlDocumentUrl" 
value="http://localhost:8081/echo-service/services/Echo?wsdl"/>
 </bean>

I had to modify the XFireClientFactoryBean so that I could pass in the instance 
of XFire from my app context for the calls new XFireProxyFactory() on lines 551 
and 571 so that the transport configuration would show up.

I currently have this working for HTTP but not JMS. I think the change 
necessary is related to anonymous endpoints not working for JMS (for which 
there is a simple fix, but I haven't added it yet).

I'll update you as a get further along. Any suggestions are welcome.

Sam

PS. I also have mostly working code to replace the custom JMS code in XFire with the Spring JMS code. This includes an integration with the spring ListenerContainer. Perhaps I could somehow get this contributed to the xfire codebase somehow?

Fried Hoeben wrote:
Sam,

This proxy factory will only work for connecting over HTTP.

Have you tried just setting the WSDL url for your service, and the service 
class? (That should work if you're using Aegis. Otherwise you'll also have to 
configure a different ServiceFactory, and maybe a few other things)

The services.xml is not relevant for clients, as far as I know.

Normally this proxy can determine the correct end point, and URL, based on the 
WSDL content.

Fried


-----Original Message-----
From: Sam Wilson [mailto:[EMAIL PROTECTED]
Sent: Fri 2/2/2007 10:26 PM
To: [email protected]
Subject: [xfire-user] Spring Remoting client to service with multiple endpoints.
All,

I have successfully configured a service with multiple endpoints (http, jms) and would now like to configure my client using the spring remoting feature using XFireClientFactoryBean.

However, it's a little unclear to me how to specify this. Should I be specifying the endpoint (setEndpoint) or simply provide the appropriate URL (setURL) and let XFire figure out which endpoint to target?

When I use the setURL approach I get an exception indicating that there is no transport registered for the URL, though I am using the same services.xml config file as the server side, which is working fine.

When I set the endpoint, I'm not really sure what value to pass in. I've tried a number of different values with no success.

Any ideas? How do you guys normally configure for such a scenario? Does the XFireClientFactoryBean make sense here, or should a different approach be taken?

Thanks,

Sam Wilson


---------------------------------------------------------------------
To unsubscribe from this list please visit:

    http://xircles.codehaus.org/manage_email


------------------------------------------------------------------------

---------------------------------------------------------------------
To unsubscribe from this list please visit:

    http://xircles.codehaus.org/manage_email

---------------------------------------------------------------------
To unsubscribe from this list please visit:

   http://xircles.codehaus.org/manage_email

Reply via email to