@@ -64,6 +64,9 @@ public class DefaultMethodEndpointAdapter extends AbstractMethodEndpointAdapter
6464 private static final String SOAP_METHOD_ARGUMENT_RESOLVER_CLASS_NAME =
6565 "org.springframework.ws.soap.server.endpoint.adapter.method.SoapMethodArgumentResolver" ;
6666
67+ private static final String SOAP_HEADER_ELEMENT_ARGUMENT_RESOLVER_CLASS_NAME =
68+ "org.springframework.ws.soap.server.endpoint.adapter.method.SoapHeaderElementMethodArgumentResolver" ;
69+
6770 private List <MethodArgumentResolver > methodArgumentResolvers ;
6871
6972 private List <MethodReturnValueHandler > methodReturnValueHandlers ;
@@ -108,23 +111,15 @@ protected void initDefaultStrategies() {
108111 initMethodReturnValueHandlers ();
109112 }
110113
111- @ SuppressWarnings ("unchecked" )
112114 private void initMethodArgumentResolvers () {
113115 if (CollectionUtils .isEmpty (methodArgumentResolvers )) {
114116 List <MethodArgumentResolver > methodArgumentResolvers = new ArrayList <MethodArgumentResolver >();
115117 methodArgumentResolvers .add (new DomPayloadMethodProcessor ());
116118 methodArgumentResolvers .add (new MessageContextMethodArgumentResolver ());
117119 methodArgumentResolvers .add (new SourcePayloadMethodProcessor ());
118120 methodArgumentResolvers .add (new XPathParamMethodArgumentResolver ());
119- try {
120- Class <MethodArgumentResolver > soapMethodArgumentResolverClass =
121- (Class <MethodArgumentResolver >) ClassUtils
122- .forName (SOAP_METHOD_ARGUMENT_RESOLVER_CLASS_NAME , getClassLoader ());
123- methodArgumentResolvers .add (BeanUtils .instantiate (soapMethodArgumentResolverClass ));
124- }
125- catch (ClassNotFoundException e ) {
126- logger .warn ("Could not find \" " + SOAP_METHOD_ARGUMENT_RESOLVER_CLASS_NAME + "\" on the classpath" );
127- }
121+ addMethodArgumentResolver (SOAP_METHOD_ARGUMENT_RESOLVER_CLASS_NAME , methodArgumentResolvers );
122+ addMethodArgumentResolver (SOAP_HEADER_ELEMENT_ARGUMENT_RESOLVER_CLASS_NAME , methodArgumentResolvers );
128123 if (isPresent (DOM4J_CLASS_NAME )) {
129124 methodArgumentResolvers .add (new Dom4jPayloadMethodProcessor ());
130125 }
@@ -148,6 +143,22 @@ private void initMethodArgumentResolvers() {
148143 }
149144 }
150145
146+ /**
147+ * Certain (SOAP-specific) {@code MethodArgumentResolver}s have to be instantiated by class name, in order to not
148+ * introduce a cyclic dependency.
149+ */
150+ @ SuppressWarnings ("unchecked" )
151+ private void addMethodArgumentResolver (String className , List <MethodArgumentResolver > methodArgumentResolvers ) {
152+ try {
153+ Class <MethodArgumentResolver > methodArgumentResolverClass =
154+ (Class <MethodArgumentResolver >) ClassUtils .forName (className , getClassLoader ());
155+ methodArgumentResolvers .add (BeanUtils .instantiate (methodArgumentResolverClass ));
156+ }
157+ catch (ClassNotFoundException e ) {
158+ logger .warn ("Could not find \" " + className + "\" on the classpath" );
159+ }
160+ }
161+
151162 private void initMethodReturnValueHandlers () {
152163 if (CollectionUtils .isEmpty (methodReturnValueHandlers )) {
153164 List <MethodReturnValueHandler > methodReturnValueHandlers = new ArrayList <MethodReturnValueHandler >();
0 commit comments