grailsアプリケーションで最初のSOAP Webサービスを契約するのに最適な方法は何ですか?私は2つのプラグインが最初のWebサービスの契約書を書くために利用可能であることが分かった1. Grails Metro Plugin 2. Grails SpringWS Plugin。grailsの最初のSOAP Webサービスを契約してください
しかし、私は契約まず、Webサービスのために使用するのが最適であるかわからないんだけど
grailsアプリケーションで最初のSOAP Webサービスを契約するのに最適な方法は何ですか?私は2つのプラグインが最初のWebサービスの契約書を書くために利用可能であることが分かった1. Grails Metro Plugin 2. Grails SpringWS Plugin。grailsの最初のSOAP Webサービスを契約してください
しかし、私は契約まず、Webサービスのために使用するのが最適であるかわからないんだけど
GrailsのSpringWSプラグインはもはや作者によってサポートされており、誰が支援を引き継ぐためにステップアップしていません。それがそのままあなたのために働くならば、それはかなりうまくいく。カスタマイズが必要になったり、バグがあったりすると、あなた自身で解決します。
私はSpringWSを使い、依存関係を手動でインポートしました。ここBuildConfig.groovyの私の依存関係のセクションです:その後、
dependencies {
runtime('org.springframework.ws:spring-ws:2.0.3.RELEASE')
runtime('org.springframework.ws:spring-ws-core:2.0.3.RELEASE')
runtime('org.springframework.ws:spring-ws-security:2.0.3.RELEASE')
runtime('org.springframework.ws:spring-ws-support:2.0.3.RELEASE')
runtime('org.springframework.ws:spring-xml:2.0.3.RELEASE')
runtime('com.sun.xml.wsit:wsit-rt:1.1')
runtime('commons-httpclient:commons-httpclient:3.0.1')
test('com.github.robfletcher:betamax:1.0')
}
とクライアントをこのように定義する:
import org.springframework.ws.transport.http.CommonsHttpMessageSender
beans = {
myMarshaller(org.springframework.oxm.jaxb.Jaxb2Marshaller) {
contextPath = "com.the.jaxb.beans.to.marshall"
}
wss4jSecurityInterceptor(org.springframework.ws.soap.security.wss4j.Wss4jSecurityInterceptor) {
securementActions = "UsernameToken"
securementPasswordType = "PasswordText"
}
myInterfaceTemplate(org.springframework.ws.client.core.WebServiceTemplate) {
marshaller = ref("myMarshaller")
unmarshaller = ref("myMarshaller")
messageSender = { CommonsHttpMessageSender ms -> }
interceptors = [wss4jSecurityInterceptor]
defaultUri = ""
}
}
それではあなたは
grails install-templates
を行うと、あなたのweb.xmlをカスタマイズします:
<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>/services/*</url-pattern>
</servlet-mapping>
そして、I c春-WS-servlet.xml
<context:component-scan base-package="com.bean.base.package"/>
<bean id="myTypes" class="org.springframework.xml.xsd.SimpleXsdSchema">
<property name="xsd" value="/WEB-INF/Types.xsd"/>
</bean>
<bean id="ContractFirstBeanName" class="org.springframework.ws.wsdl.wsdl11.SimpleWsdl11Definition"
p:wsdl="/WEB-INF/ContractFirstBeanName.wsdl"/>
<bean class="org.springframework.ws.transport.http.XsdSchemaHandlerAdapter"/>
<bean id="outputMarshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller"
p:contextPath="com.output.beans"/>
<bean class="org.springframework.ws.server.endpoint.mapping.PayloadRootAnnotationMethodEndpointMapping">
<property name="interceptors">
<list>
<bean id="loggingInterceptor"
class="org.springframework.ws.server.endpoint.interceptor.PayloadLoggingInterceptor">
<property name="logRequest" value="true"/>
<property name="logResponse" value="true"/>
</bean>
<ref local="wsSecurityInterceptor"/>
</list>
</property>
</bean>
<bean class="org.springframework.ws.transport.http.WsdlDefinitionHandlerAdapter">
<property name="transformLocations" value="true"/>
</bean>
<bean class="org.springframework.ws.transport.http.WebServiceMessageReceiverHandlerAdapter">
<property name="messageFactory">
<bean class="org.springframework.ws.soap.saaj.SaajSoapMessageFactory"/>
</property>
</bean>
<bean class="org.springframework.ws.server.endpoint.adapter.GenericMarshallingMethodEndpointAdapter">
<constructor-arg ref="outputMarshaller" index="0"/>
</bean>
<bean id="wsSecurityInterceptor"
class="org.springframework.ws.soap.security.xwss.XwsSecurityInterceptor">
<property name="policyConfiguration" value="/WEB-INF/securityPolicy.xml"/>
<property name="callbackHandlers">
<list>
<ref bean="springWSSecurityHandler"/>
</list>
</property>
</bean>
<bean id="springWSSecurityHandler"
class="org.springframework.ws.soap.security.xwss.callback.SpringPlainTextPasswordValidationCallbackHandler">
<property name="authenticationManager" ref="authenticationManager"/>
</bean>
をreatedさて、これはGrailsのでは、あなたの春のWS契約最初のエンドポイントを与えます。
かなり古い投稿ですが、他人を助けるかもしれません。
代わりにweb.xmlファイルを変更できるようにテンプレートをインストールするので、あなたはまた、スクリプトで動的にMessageDispatcherサーブレットとそのマッピングを追加処理することができます/ _Events.groovy:
ロブのポストに加えてeventWebXmlEnd = { String tmpfile ->
GPathResult root = new XmlSlurper().parse(webXmlFile)
GPathResult servlets = root.servlet
servlets[servlets.size() - 1] + {
'servlet' {
'display-name'("web-services")
'servlet-name'("web-services")
'servlet-class'("org.springframework.ws.transport.http.MessageDispatcherServlet")
}
}
def servletMappings = root.'servlet-mapping'
servletMappings[servletMappings.size() - 1] + {
'servlet-mapping' {
'servlet-name'("web-services")
'url-pattern'("/services/*")
}
}
// update web.xml content
webXmlFile.text = new StreamingMarkupBuilder().bind {
mkp.declareNamespace("":"http://java.sun.com/xml/ns/javaee")
mkp.yield(root)
}
}