美文网首页
grails3开发webservice

grails3开发webservice

作者: Toplhyi | 来源:发表于2019-04-26 16:12 被阅读0次

    grails3下使用cxf开发webservice

    1. 在build.gradle中添加依赖
    dependencies {
        ...
        compile 'org.grails.plugins:cxf:3.1.2'
    }
    
    1. 创建Service类
    import grails.gorm.transactions.Transactional
    import org.grails.cxf.utils.GrailsCxfEndpoint
    
    import javax.jws.WebMethod
    import javax.jws.WebParam
    import javax.jws.WebResult
    
    @Transactional
    @GrailsCxfEndpoint(address = '/demo')
    class DemoService {
    
        @WebMethod
        @WebResult(name = "result")
        def serviceMethod(@WebParam(name = "id")Long id) {
            println "接收到的ID為:${id}"
            def map = [:]
            map.result = 1
            map.message = "success"
            return map.toString()
        }
    }
    
    
    1. webservice已开发完成,启动项目。访问http://localhost:8080/services

    2. 因为业务需要,配置拦截器,定义LogDbInterceptor.groovy

    
    import org.apache.cxf.helpers.IOUtils
    import org.apache.cxf.interceptor.Fault
    import org.apache.cxf.message.Message
    import org.apache.cxf.phase.AbstractPhaseInterceptor
    
    /**
     * 拦截器
     * 用以记录日志
     */
    class LogDbInterceptor extends AbstractPhaseInterceptor<Message>{
    
    
        LogDbInterceptor(String phase) {
            super(phase)
        }
    
        @Override
        void handleMessage(Message message) throws Fault {
            InputStream is = message.getContent(InputStream.class)
            if (is != null) {
                try {
                    // 得到报文
                    String str = IOUtils.toString(is);
                    println str
    //                <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:rec="http://recruit.bjrxkj.com/">
    //                    <soapenv:Header/>
    //                    <soapenv:Body>
    //                        <rec:serviceMethod>
    //                            <!--Optional:-->
    //                            <id>111111</id>
    //                        </rec:serviceMethod>
    //                    </soapenv:Body>
    //                </soapenv:Envelope>
                    // 流读取之后,会报Couldn't parse stream.
                    InputStream ism = new ByteArrayInputStream(str.getBytes());
                    message.setContent(InputStream.class, ism);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    
    
    1. 在Application.groovy类中定义Bean
    import com.bjrxkj.recruit.interceptor.LogDbInterceptor
    import grails.boot.GrailsApp
    import grails.boot.config.GrailsAutoConfiguration
    import org.apache.cxf.phase.Phase
    import org.springframework.context.annotation.Bean
    
    class Application extends GrailsAutoConfiguration {
        static void main(String[] args) {
            GrailsApp.run(Application, args)
        }
    
        @Bean
        public LogDbInterceptor logDbInterceptor() {
            // Phase.RECEIVE 在接收的时候进行拦截
            return new LogDbInterceptor(Phase.RECEIVE);
        }
    }
    
    1. webservice引用拦截器
    import grails.gorm.transactions.Transactional
    import org.grails.cxf.utils.GrailsCxfEndpoint
    
    import javax.jws.WebMethod
    import javax.jws.WebParam
    import javax.jws.WebResult
    
    @Transactional
    @GrailsCxfEndpoint(address = '/demo', inInterceptors = ['logDbInterceptor'])
    class DemoService {
    
        @WebMethod
        @WebResult(name = "result")
        def serviceMethod(@WebParam(name = "id")Long id) {
            println "接收到的ID為:${id}"
            def map = [:]
            map.result = 1
            map.message = "success"
            return map.toString()
        }
    }
    
    

    完成

    相关文章

      网友评论

          本文标题:grails3开发webservice

          本文链接:https://www.haomeiwen.com/subject/sfhqnqtx.html