1
16
17 package org.springframework.ws.server.endpoint.adapter.method.jaxb;
18
19 import javax.xml.bind.JAXBElement;
20 import javax.xml.bind.JAXBException;
21 import javax.xml.bind.annotation.XmlRootElement;
22 import javax.xml.bind.annotation.XmlType;
23
24 import org.springframework.core.MethodParameter;
25 import org.springframework.ws.context.MessageContext;
26
27
36 public class XmlRootElementPayloadMethodProcessor extends AbstractJaxb2PayloadMethodProcessor {
37
38 @Override
39 protected boolean supportsRequestPayloadParameter(MethodParameter parameter) {
40 Class<?> parameterType = parameter.getParameterType();
41 return parameterType.isAnnotationPresent(XmlRootElement.class) ||
42 parameterType.isAnnotationPresent(XmlType.class);
43 }
44
45 @Override
46 public Object resolveArgument(MessageContext messageContext, MethodParameter parameter) throws JAXBException {
47 Class<?> parameterType = parameter.getParameterType();
48
49 if (parameterType.isAnnotationPresent(XmlRootElement.class)) {
50 return unmarshalFromRequestPayload(messageContext, parameterType);
51 }
52 else {
53 JAXBElement<?> element = unmarshalElementFromRequestPayload(messageContext, parameterType);
54 return element != null ? element.getValue() : null;
55 }
56 }
57
58 @Override
59 protected boolean supportsResponsePayloadReturnType(MethodParameter returnType) {
60 Class<?> parameterType = returnType.getParameterType();
61 return parameterType.isAnnotationPresent(XmlRootElement.class);
62 }
63
64 @Override
65 protected void handleReturnValueInternal(MessageContext messageContext, MethodParameter returnType, Object returnValue)
66 throws JAXBException {
67 Class<?> parameterType = returnType.getParameterType();
68 marshalToResponsePayload(messageContext, parameterType, returnValue);
69 }
70
71
72 }
73