Мне это кажется немного странным - у меня есть очень простая служба SOAP, построенная на Spring-WS, которая отлично развертывается и работает внутри контейнера Tomcat 7. В последнее время я экспериментировал с Glassfish 4 и пытался заставить эту службу SOAP работать, но каждый раз, когда я пытаюсь проверить вызов через SoapUI, получаю сообщение «Метод 405 не разрешен».
Есть ли у кого-нибудь советы по поводу того, что может вызвать это? Это точно такая же WAR, развернутая в обоих контейнерах - единственное изменение, которое я внес, - это настройка поиска JNDI в моем источнике данных на моем уровне обслуживания, все остальное идентично.
На самом деле странно то, что при развертывании в Glassfish он будет обслуживать WSDL (т.е. localhost:8080/user-soap-service/user.wsdl
), поэтому я знаю, что приложение развернуто / прослушивает этот URL-адрес - оно просто отказывается пропускать любые POST-запросы через него, как кажется.
Это мой web.xml:
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>user-soap-service</servlet-name>
<servlet-class>org.springframework.ws.transport.http.MessageDispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>user-soap-service</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
И это мой контекст приложения:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<context:annotation-config/>
<import resource="classpath:user-service.xml"/>
<bean id="userService" class="com.myorg.service.user.services.UserServiceBean"/>
<bean class="org.springframework.ws.server.endpoint.mapping.PayloadRootAnnotationMethodEndpointMapping"/>
<bean id="userEndpoint" class="com.myorg.api.endpoints.UserMarshallingEndpoint"/>
<bean class="org.springframework.ws.server.endpoint.adapter.GenericMarshallingMethodEndpointAdapter">
<property name="marshaller" ref="marshaller"/>
<property name="unmarshaller" ref="marshaller"/>
</bean>
<bean id="marshaller" class="org.springframework.oxm.castor.CastorMarshaller">
<property name="mappingLocation" value="classpath:mapping.xml"/>
</bean>
<bean id="user" class="org.springframework.ws.wsdl.wsdl11.DefaultWsdl11Definition">
<property name="schema">
<bean class="org.springframework.xml.xsd.SimpleXsdSchema">
<property name="xsd" value="/WEB-INF/user.xsd"/>
</bean>
</property>
<property name="portTypeName" value="User"/>
<property name="locationUri" value="http://localhost:8080/user-soap-service"/>
</bean>
</beans>
Все развертывается нормально (без ошибок / предупреждений), и если я сравниваю WSDL, обслуживаемый при развертывании в Tomcat, с тем, как он выглядит, когда он развертывается в Glassfish, они идентичны. Есть ли у кого-нибудь мысли по поводу того, что может происходить?
ОБНОВЛЕНИЕ. Это действительно неожиданно, но отлично работает со старомодным завитком (ранее я тестировал с SoapUI). Теперь я собираюсь сосредоточить свое исследование на том, как SoapUI строит свой вызов по сравнению с тем, что я делаю с помощью curl.