Using "AbstractMarshallingPayloadEndpoint" seems to work, but unfortunately, the WSDL generated doesn't comport any operation.
Code:
package com.pwet.finance.stockquote.ws;
import org.springframework.oxm.Marshaller;
import org.springframework.ws.server.endpoint.AbstractMarshallingPayloadEndpoint;
import org.springframework.util.xml.DomUtils;
import org.springframework.ws.server.endpoint.AbstractDomPayloadEndpoint;
import org.springframework.ws.server.endpoint.AbstractMarshallingPayloadEndpoint;
import com.pwet.data.generic.*;
public class GenericEndpointMarshalled extends AbstractMarshallingPayloadEndpoint {
public GenericEndpointMarshalled(){}
public GenericEndpointMarshalled(Marshaller marshaller) {
super(marshaller);
}
protected Object invokeInternal(Object request) throws Exception {
MessageDocument requestDoc = (MessageDocument)request;
//Here do stuff with request
return requestDoc;
}
}
Code:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="qualified" targetNamespace="generic.data.pwet.com" xmlns:tns="generic.data.pwet.com">
<xs:element name="message">
<xs:complexType>
<xs:sequence>
<xs:any minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
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">
<bean class="org.springframework.ws.server.endpoint.mapping.PayloadRootQNameEndpointMapping">
<property name="defaultEndpoint" ref="genericEndpoint"/>
</bean>
<bean id="genericEndpoint" class="com.pwet.finance.stockquote.ws.GenericEndpointMarshalled">
<constructor-arg ref="xmlbeansMarshaller"/>
</bean>
<bean id="xmlbeansMarshaller" class="org.springframework.oxm.xmlbeans.XmlBeansMarshaller" />
<bean id="generic" class="org.springframework.ws.wsdl.wsdl11.DefaultWsdl11Definition">
<property name="schema" ref="schema"/>
<property name="portTypeName" value="Generic"/>
<property name="locationUri" value="http://localhost:8080/genericService/genericService"/>
</bean>
<bean id="schema" class="org.springframework.xml.xsd.SimpleXsdSchema">
<property name="xsd" value="/WEB-INF/generic.xsd"/>
</bean>
</beans>
Code:
<wsdl:definitions targetNamespace="generic.data.pwet.com">
<wsdl:types>
<xs:schema attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="generic.data.pwet.com">
<xs:element name="message">
<xs:complexType>
<xs:sequence>
<xs:any minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
</wsdl:types>
<wsdl:portType name="Generic">
</wsdl:portType>
<wsdl:binding name="GenericSoap11" type="tns:Generic">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
</wsdl:binding>
<wsdl:service name="GenericService">
<wsdl:port binding="tns:GenericSoap11" name="GenericSoap11">
<soap:address location="http://localhost:8080/genericService/genericService"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>