In an effort to spur some thought about my topic here I am prepared to provide additional information relating to some work I have already done for this problem. Please let me know if I am on the right track.
Here is my web.xml:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<display-name>xxx Web Service</display-name>
<servlet>
<servlet-name>spring-ws</servlet-name>
<servlet-class>org.springframework.ws.transport.http.MessageDispatcherServlet</servlet-class>
<init-param>
<param-name>transformWsdlLocations</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring-ws</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>spring-ws</servlet-name>
<url-pattern>/axis2/services/*</url-pattern>
</servlet-mapping>
</web-app>
Here is my spring-ws-servlet.xml:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd"
xmlns:util="http://www.springframework.org/schema/util">
<!--
<bean id="payloadMapping" class="org.springframework.ws.server.endpoint.mapping.PayloadRootQNameEndpointMapping">
<property name="defaultEndpoint" ref="xxxSpringWSEndpoint"/>
<property name="interceptors">
<list>
<ref local="validatingInterceptor"/>
<ref local="loggingInterceptor"/>
</list>
</property>
</bean>
-->
<bean id="payloadMapping" class="org.springframework.ws.soap.server.endpoint.mapping.SoapActionEndpointMapping">
<property name="mappings">
<props>
<prop key="http://xxx.xxx.com/AuthenticateUser">xxxSpringWSEndpoint</prop>
<prop key="http://xxx.xxx.com/GetVersions">xxxSpringWSEndpoint</prop>
</props>
</property>
<property name="interceptors">
<list>
<bean class="org.springframework.ws.server.endpoint.interceptor.PayloadLoggingInterceptor" />
<bean class="org.springframework.ws.soap.server.endpoint.interceptor.SoapEnvelopeLoggingInterceptor" />
</list>
</property>
</bean>
<!-- -->
<bean id="messageFactory" class="org.springframework.ws.soap.saaj.SaajSoapMessageFactory">
<!--
<property name="soapVersion">
<util:constant static-field="org.springframework.ws.soap.SoapVersion.SOAP_12"/>
</property>
-->
</bean>
<!-- -->
<!--
<bean id="validatingInterceptor"
class="org.springframework.ws.soap.server.endpoint.interceptor.PayloadValidatingInterceptor">
<property name="xsdSchema" ref="schema"/>
<property name="validateRequest" value="true"/>
<property name="validateResponse" value="true"/>
</bean>
<bean id="loggingInterceptor" class="org.springframework.ws.server.endpoint.interceptor.PayloadLoggingInterceptor">
<description>
This interceptor logs the message payload.
</description>
</bean>
-->
<bean id="xxxSpringWSEndpoint" class="com.xxx.xxx.ws.xxxSpringWSEndPoint">
<constructor-arg ref="xxxService"/>
<constructor-arg ref="marshaller"/>
</bean>
<bean id="marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
<property name="classesToBeBound">
<list>
<value>com.xxx.xxx.AuthenticateUser</value>
<value>com.xxx.xxx.AuthenticateUserResponse</value>
<value>com.xxx.xxx.GetVersions</value>
<value>com.xxx.xxx.GetVersionsResponse</value>
</list>
</property>
<!--<property name="schema" ref="schema"/>-->
</bean>
<bean id="xxxWS" class="org.springframework.ws.wsdl.wsdl11.SimpleWsdl11Definition">
<constructor-arg value="/WEB-INF/wsdl/xxxWS.wsdl"/>
</bean>
<!--
<bean id="schema" class="org.springframework.xml.xsd.SimpleXsdSchema">
<description>
This bean definition contains the XSD schema.
</description>
<property name="xsd" value="/WEB-INF/xxxWS.xsd"/>
</bean>
-->
<bean id="xxxService" class="com.xxx.xxx.ws.service.impl.xxxServiceImpl">
<description>
This bean is our "business" service.
</description>
</bean>
</beans>
Here's my xxxSpringWSEndpoint java file:
Code:
package com.xxx.xxx.ws;
import com.xxx.xxx.ws.service.xxxService;
import com.xxx.xxx.AuthenticateUser;
import com.xxx.xxx.AuthenticateUserResponse;
import com.xxx.xxx.GetVersions;
import com.xxx.xxx.GetVersionsResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.oxm.Marshaller;
import org.springframework.ws.context.MessageContext;
import org.springframework.ws.server.endpoint.AbstractMarshallingPayloadEndpoint;
/**
*
* @author msucena
*/
public class xxxSpringWSEndPoint extends AbstractMarshallingPayloadEndpoint
{
/** Logging */
private static final Log log = LogFactory.getLog(xxxSpringWSEndPoint.class);
private xxxService xxxService;
public xxxSpringWSEndPoint(xxxService svc, Marshaller marsh)
{
super(marsh);
xxxService = svc;
}
@Override
protected boolean onUnmarshalRequest(MessageContext messageContext,
Object requestObject) throws Exception
{
log.debug("onUnmarshalRequest");
return super.onUnmarshalRequest(messageContext, requestObject);
}
@Override
protected void onMarshalResponse(MessageContext messageContext,
Object requestObject, Object responseObject)
{
log.debug("onMarshalResponse");
super.onMarshalResponse(messageContext, requestObject, responseObject);
}
@Override
protected Object invokeInternal(Object requestObj)
throws Exception
{
log.debug("invokeInternal");
if (requestObj instanceof AuthenticateUser) //TODO, need to parse requestElement for proper condition
{
AuthenticateUser auReqObj = (AuthenticateUser)requestObj;
AuthenticateUserResponse aurRespObj = new AuthenticateUserResponse();
aurRespObj = xxxService.AuthenticateUser(auReqObj);
return aurRespObj;
}
else if (requestObj instanceof GetVersions)
{
GetVersions gvReqObj = (GetVersions)requestObj;
GetVersionsResponse gvrRespObj = new GetVersionsResponse();
gvrRespObj = xxxService.GetVersions(gvReqObj);
return gvrRespObj;
}
else //unknown request type
{
return null;
}
}
}
The problem I am having right now is that my Flex client is not reaching the new Web Service. When I start the Web Service it compiles and builds but then I get a 405 error page in Tomcat with this error: The specified HTTP method is not allowed for the requested resource (). I can view my WSDL if I go to http://localhost:8060/xxxWS/xxxWS.wsdl or http://localhost:8060/xxxSpringWS/xxxWS.wsdl. Because of this I am not sure if my current problem is in the Web Service or the Flex client.
Can anyone provide any additional information? Also, please let me know if providing any additional code would be of assistance.
Sincerely,
Mike Sucena
Software Engineer