I don't think they've changed much. Mainly I just removed the
<classname>.aegis.xml files that I had left in before but assumed would
not be used because I was using the
Jsr181WebAnnotations/Jsr181HandlerMapping in my xfire-servlet.xml.
Also, I put annotations in both my web service interface AND
implementation classes because I saw that cameron had done his that way.
Previously, I only had annotations in my web service implementation
class. By the way, on a side note, I wonder if the bean that contains
the implementation for the web service interface MUST be called
'annotatedXXXXX' (annotatedWinstonWebServiceImpl in my case) and that is
how the Jsr181WebAnnotations/Jsr181HandlerMapping classes know which
class to read through for web service annotations. I see that the
documentation does this, but I wasn't sure if they prefixed the beans
with 'annotated' because it was required of because the authors wanted
to pointed out that these classes were now annotated versions of the
ones from the previous chapters.
Anyway, here is my web.xml:
<web-app>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:org/codehaus/xfire/spring/xfire.xml
classpath:org/winston/dao/hibernate/applicationContext-hibernate.xml
</param-value>
</context-param>
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/log4j.properties</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>xfire</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>xfire</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
and here is my xfire-servlet.xml:
<beans>
<import resource="classpath:org/codehaus/xfire/spring/xfire.xml" />
<bean id="webAnnotations"
class="org.codehaus.xfire.annotations.jsr181.Jsr181WebAnnotations" />
<bean id="handlerMapping"
class="org.codehaus.xfire.spring.remoting.Jsr181HandlerMapping">
<property name="typeMappingRegistry">
<ref bean="xfire.typeMappingRegistry" />
</property>
<property name="xfire">
<ref bean="xfire" />
</property>
<property name="webAnnotations">
<ref bean="webAnnotations" />
</property>
</bean>
<bean id="annotatedWinstonWebServiceImpl"
class="org.winston.ws.impl.WinstonWebServiceImpl" />
<bean
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="urlMap">
<map>
<entry key="/">
<ref bean="handlerMapping" />
</entry>
</map>
</property>
</bean>
</beans>
On Fri, Mar 24, 2006 at 8:17 AM, Jason Tesser wrote:
William,
Also what do your web.xml *-servlet.xml look like now? have they
changed since your initial posting?
On 3/24/06, Jason Tesser < [EMAIL PROTECTED]> wrote: what jar are u
using to provide javax.jws.WebService? the xfire-jsr181-api-1.0-M1.jar
or the wsm-1.0-alpha.jar?
On 3/23/06, William White < [EMAIL PROTECTED]> wrote: I'm pasting
the code for you below. I finally got it working by trial
and error and I'm not sure exactly what I was doing wrong. I was trying
to make publish my service using three different methods:
#1. Using the DispatcherServlet in web.xml, which reads the
xfire-servlet.xml file containing the
Jsr181WebAnnotations/Jsr181HandlerMapping/SimpleUrlHandlerMapping
combination.
#2. Using the DispatcherServlet in web.xml, which reads the
xfire-servlet.xml file containing the
XFireExporter/SimpleUrlHandlerMapping combinations.
#3. XFireConfigurableServlet in the web.xml, which ignores the
xfire-servlet.xml and instead uses the META-INF/xfire/services.xml file
which contains my reference to the webserice using the
org.codehaus.xfire.jaxws.JAXWSServiceFactory .
I proved the method #3 would work, and now I've got #1 working as well.
Like I said, I'm not sure what I did to fix it, but I did remove the
User.aegis.xml and School.aegis.xml files that were apparently still
being read even though I was using the
Jsr181WebAnnotations/Jsr181HandlerMapping in the xfire-servlet.xml which
I figured would use the annotations and ignore the mapping files. I
thought the mapping files would only get read when I was using the
default method for exporting the service. (i.e. not declaring the
JAXWSServiceFactory in the services.xml in case #3, or not using the
Jsr181WebAnnotations/Jsr181HandlerMapping beans in the
xfire-servlet.xml ). This is all very confusing!
Regardless, my service class and interface are pasted below. If you
want, I can post all of my code in more detail. I think you have to
make sure the web.xml file and xfire-servlet.xml file are setup
perfectly for this all to work.
------Service interface--------
package org.winston.ws;
import java.util.Collection;
import org.winston.domain.School;
import org.winston.domain.User;
import javax.jws.WebMethod;
import javax.jws.WebResult;
import javax.jws.WebService;
@WebService(targetNamespace = " org.winston.ws")
public interface WinstonWebService
{
public String echo(String echoString);
public User getUser(String userId);
@WebMethod()
@WebResult(name = "UsersArray", targetNamespace = "
org.winston.ws")
public User[] getUsersArray();
@WebMethod()
@WebResult(name = "UsersList", targetNamespace = "
org.winston.ws")
public Collection<User> getUsersList();
@WebMethod()
@WebResult(name = "SchoolsArray", targetNamespace =
" org.winston.ws")
public School[] getSchoolsArray();
@WebMethod()
@WebResult(name = "SchoolsList", targetNamespace =
" org.winston.ws")
public Collection<School> getSchoolsList();
}
--------Service Implementation class--------
package org.winston.ws.impl;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import javax.jws.WebMethod ;
import javax.jws.WebResult;
import javax.jws.WebService;
import org.winston.domain.School;
import org.winston.domain.User;
import org.winston.ws.WinstonWebService;
@WebService(serviceName = "WinstonWebService", endpointInterface =
"org.winston.ws.WinstonWebService")
public class WinstonWebServiceImpl
implements WinstonWebService
{
public String echo(String echoString)
{
return "Hello " + echoString;
}
public User getUser(String userId)
{
System.out.println("getUser(" + userId + ")");
User returnUser = new User();
returnUser.setId (new Long(userId));
returnUser.setUsername("TestUser");
returnUser.setPassword("password");
returnUser.setEnabled(true);
returnUser.setEmail(" [EMAIL PROTECTED]");
returnUser.setLastLogin(new Long(System.currentTimeMillis()));
return returnUser;
}
public User[] getUsersArray()
{
User[] userArray = new User[4];
userArray[0] = new User();
userArray[0].setId(new Long(50));
userArray[0].setUsername("Bob Smith");
userArray[0].setPassword("password");
userArray[0].setEnabled(true);
userArray[0].setEmail(" [EMAIL PROTECTED]");
userArray[0].setLastLogin(new
Long( System.currentTimeMillis()));
...(truncated).....
userArray[3] = new User();
userArray[3].setId(new Long(80));
userArray[3].setUsername("Tammy Johnson");
userArray[3].setPassword("password");
userArray[3].setEnabled(true);
userArray[3].setEmail(" [EMAIL PROTECTED]");
userArray[3].setLastLogin(new
Long(System.currentTimeMillis()));
return userArray;
}
public Collection<User> getUsersList()
{
List returnUserList = new ArrayList();
User newUser1 = new User();
newUser1.setId(new Long(50));
newUser1.setUsername("Bob Smith");
newUser1.setPassword("password");
newUser1.setEnabled(true);
newUser1.setEmail(" [EMAIL PROTECTED]");
newUser1.setLastLogin(new Long(System.currentTimeMillis()));
returnUserList.add(newUser1);
...(truncated).....
User newUser4 = new User();
newUser4.setId(new Long(80));
newUser4.setUsername("Tammy Johnson");
newUser4.setPassword("password");
newUser4.setEnabled(true);
newUser4.setEmail(" [EMAIL PROTECTED]");
newUser4.setLastLogin(new Long(System.currentTimeMillis()));
returnUserList.add(newUser4);
return returnUserList;
}
public School[] getSchoolsArray()
{
User[] userArray = new User[4];
School[] schoolArray = new School[4];
schoolArray[0] = new School();
schoolArray[0].setId(new Long(1));
schoolArray[0].setName("Winston School");
schoolArray[0].setAddress1("100 No Way");
schoolArray[0].setAddress2("");
schoolArray[0].setCity("Dallas");
schoolArray[0].setState("TX");
schoolArray[0].setZipcode("12345");
...(truncated).....
schoolArray[3] = new School();
schoolArray[3].setId(new Long(4));
schoolArray[3].setName("St. Marx");
schoolArray[3].setAddress1("503 Some Lane");
schoolArray[3].setAddress2("Bldg 100");
schoolArray[3].setCity("Ft. Worth");
schoolArray[3].setState("TX");
schoolArray[3].setZipcode("11545");
return schoolArray;
}
public Collection<School> getSchoolsList()
{
List returnSchoolList = new ArrayList();
School newSchool1 = new School();
newSchool1.setId(new Long(1));
newSchool1.setName("Winston School");
newSchool1.setAddress1("100 No Way");
newSchool1.setAddress2("");
newSchool1.setCity("Dallas");
newSchool1.setState("TX");
newSchool1.setZipcode ("12345");
returnSchoolList.add(newSchool1);
...(truncated).....
School newSchool4 = new School();
newSchool4.setId(new Long(4));
newSchool4.setName ("St. Marx");
newSchool4.setAddress1("503 Some Lane");
newSchool4.setAddress2("Bldg 100");
newSchool4.setCity("Ft. Worth");
newSchool4.setState ("TX");
newSchool4.setZipcode("11545");
returnSchoolList.add(newSchool4);
return returnSchoolList;
}
}
On Thu, Mar 23, 2006 at 3:00 PM, Jason Tesser wrote:
would you mind pasting your org.winston.ws.impl.WinstonWebServiceImpl
class here? i am trying to do a similar thing and cannot even get teh
@WebService to work :-s
On 3/23/06, William White < [EMAIL PROTECTED]<
javascript:lzSetCanvasAttribute('js_mailto',
' [EMAIL PROTECTED]')> > wrote: Hi All,
...(truncated).....