栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

[spring处理webservice报文] 1 spring如何搭建webservice服务

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

[spring处理webservice报文] 1 spring如何搭建webservice服务

目录

1 背景

2 sping里头搭建webservice

2.1 wsapplication

 2.2 futurwebservice

2.3 futurewebserviceimpl

2.4 webserviceconfig

3 soapui

4 调试

4.1 启动项目

4.2 查看wsdl

4.3 soapui模拟请求ws服务

5 焕然醒悟


1 背景

最近收到一个需求,比较坑,但是大概的意思看懂了,但是其中让我大意的是:

需求说,双方通信采用报文的形式,如下:


   
   
      报文密文
   

乍一看,soap呀,那这个不就是一个webservice服务嘛?于是脑子一热,就开始搭建werbservice服务了(公司里头的项目采用的是sprngmvc)

(备注:后面在模拟调试过程中发现问题:这不是一个webservice服务,就只是一个普通的rest服务,但是为了还原那会的想法,因此下面的博客将错就错。)

2 sping里头搭建webservice

公司没有使用springboot快速框架,而是采用ssm。但是spring4.x以上的版本,基本上很多springboot上的编程习惯都可以直接迁移到ssm,因此在家里复现过程,我采用了springboot基础框架。

首先使用idea快速创建一个springboot项目。

创建过程没有什么注意的点,因为在下面我会将项目的pom贴出来:



    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        2.1.1.RELEASE
         
    
    com.future
    ws
    0.0.1-SNAPSHOT
    ws
    Demo project for Spring Boot
    
        1.8
    
    
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.boot
            spring-boot-starter-web-services
        

        
            org.projectlombok
            lombok
            true
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        

        
            org.apache.cxf
            cxf-spring-boot-starter-jaxws
            3.3.1
        
        
            org.apache.cxf
            cxf-rt-transports-http
            3.2.2
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
                
                    
                        
                            org.projectlombok
                            lombok
                        
                    
                
            
        
    


上面这个pom这边要特别强调:

springboot的版本和cxf的版本有比较严格的要求。

我使用的cxf是3.x版本,而springboot是2.1.1版本,

一开始,我cxf是3.x版本,但是springboot采用的是最新的2.6.7版本,启动项目瞬间就是一堆的错误。

然后,就如下创建一个webservice服务:

有涉及的文件,都在上面了,下面我一个文件一个文件的解释 :

2.1 wsapplication

因为webservice服务依赖cxfservlet,因此需要打开servlet描述:

 2.2 futurwebservice

定义一个webservice接口:

package com.future.ws.ws;

import javax.jws.WebMethod;
import javax.jws.WebService;

@WebService
public interface FutureWebService {

    @WebMethod
    String wsIn();
}

2.3 futurewebserviceimpl

实现webservice接口:

package com.future.ws.ws.impl;

import com.future.ws.ws.FutureWebService;
import org.springframework.stereotype.Component;

import javax.jws.WebService;

@Component
@WebService(endpointInterface = "com.future.ws.ws.FutureWebService")
public class FutureWebServiceImpl implements FutureWebService {

    @Override
    public String wsIn(String name) {
        return "111";
    }

}

2.4 webserviceconfig

还需要针对webservice做一些配置。

package com.future.ws.config;

import com.future.ws.ws.FutureWebService;
import org.apache.cxf.Bus;
import org.apache.cxf.bus.spring.SpringBus;
import org.apache.cxf.jaxws.EndpointImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.xml.ws.Endpoint;

@Configuration
public class WebServiceConfig {

    
    @Autowired
    private FutureWebService futureWebService;

    
    @Bean(name = Bus.DEFAULT_BUS_ID)
    public SpringBus springBus() {
        return new SpringBus();
    }

    
//    @Bean
//    public ServletRegistrationBean dispatcherServlet() {
//        return new ServletRegistrationBean(new CXFServlet(), "/soap/*");
//    }
    @Bean
    public Endpoint endpoint() {
        EndpointImpl endpoint = new EndpointImpl(springBus(), futureWebService);
        endpoint.publish("/ws/api");
        return endpoint;
    }
}

3 soapui

webservice服务调试,一般采用soapui来调试,虽然同事说可以采用postman,但是因为个人没用过,因此还是先按照经验走吧。下载地址如下:

Download REST & SOAP Automated API Testing Tool | Open Source | SoapUIhttps://www.soapui.org/downloads/soapui/

 下载下来后直接傻瓜式安装即可。

4 调试

4.1 启动项目

直接启动springboot项目:

"C:Program FilesJavajdk1.8.0_144binjava.exe" -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:8906,suspend=y,server=n -Dspring.output.ansi.enabled=always -javaagent:C:Users32631.IntelliJIdea2018.3systemcaptureAgentdebugger-agent.jar -Dfile.encoding=UTF-8 -classpath "C:Program FilesJavajdk1.8.0_144jrelibcharsets.jar;C:Program FilesJavajdk1.8.0_144jrelibdeploy.jar;C:Program FilesJavajdk1.8.0_144jrelibextaccess-bridge-64.jar;C:Program FilesJavajdk1.8.0_144jrelibextcldrdata.jar;C:Program FilesJavajdk1.8.0_144jrelibextdnsns.jar;C:Program FilesJavajdk1.8.0_144jrelibextjaccess.jar;C:Program FilesJavajdk1.8.0_144jrelibextjfxrt.jar;C:Program FilesJavajdk1.8.0_144jrelibextlocaledata.jar;C:Program FilesJavajdk1.8.0_144jrelibextnashorn.jar;C:Program FilesJavajdk1.8.0_144jrelibextsunec.jar;C:Program FilesJavajdk1.8.0_144jrelibextsunjce_provider.jar;C:Program FilesJavajdk1.8.0_144jrelibextsunmscapi.jar;C:Program FilesJavajdk1.8.0_144jrelibextsunpkcs11.jar;C:Program FilesJavajdk1.8.0_144jrelibextzipfs.jar;C:Program FilesJavajdk1.8.0_144jrelibjavaws.jar;C:Program FilesJavajdk1.8.0_144jrelibjce.jar;C:Program FilesJavajdk1.8.0_144jrelibjfr.jar;C:Program FilesJavajdk1.8.0_144jrelibjfxswt.jar;C:Program FilesJavajdk1.8.0_144jrelibjsse.jar;C:Program FilesJavajdk1.8.0_144jrelibmanagement-agent.jar;C:Program FilesJavajdk1.8.0_144jrelibplugin.jar;C:Program FilesJavajdk1.8.0_144jrelibresources.jar;C:Program FilesJavajdk1.8.0_144jrelibrt.jar;C:mefuture-learningwstargetclasses;C:mavenrepositoryorgspringframeworkbootspring-boot-starter-web2.1.1.RELEASEspring-boot-starter-web-2.1.1.RELEASE.jar;C:mavenrepositoryorgspringframeworkbootspring-boot-starter2.1.1.RELEASEspring-boot-starter-2.1.1.RELEASE.jar;C:mavenrepositoryorgspringframeworkbootspring-boot2.1.1.RELEASEspring-boot-2.1.1.RELEASE.jar;C:mavenrepositoryorgspringframeworkbootspring-boot-autoconfigure2.1.1.RELEASEspring-boot-autoconfigure-2.1.1.RELEASE.jar;C:mavenrepositoryorgspringframeworkbootspring-boot-starter-logging2.1.1.RELEASEspring-boot-starter-logging-2.1.1.RELEASE.jar;C:mavenrepositorychqoslogbacklogback-classic1.2.3logback-classic-1.2.3.jar;C:mavenrepositorychqoslogbacklogback-core1.2.3logback-core-1.2.3.jar;C:mavenrepositoryorgapachelogginglog4jlog4j-to-slf4j2.11.1log4j-to-slf4j-2.11.1.jar;C:mavenrepositoryorgapachelogginglog4jlog4j-api2.11.1log4j-api-2.11.1.jar;C:mavenrepositoryorgslf4jjul-to-slf4j1.7.25jul-to-slf4j-1.7.25.jar;C:mavenrepositoryjavaxannotationjavax.annotation-api1.3.2javax.annotation-api-1.3.2.jar;C:mavenrepositoryorgyamlsnakeyaml1.23snakeyaml-1.23.jar;C:mavenrepositoryorgspringframeworkbootspring-boot-starter-json2.1.1.RELEASEspring-boot-starter-json-2.1.1.RELEASE.jar;C:mavenrepositorycomfasterxmljacksoncorejackson-databind2.9.7jackson-databind-2.9.7.jar;C:mavenrepositorycomfasterxmljacksoncorejackson-annotations2.9.0jackson-annotations-2.9.0.jar;C:mavenrepositorycomfasterxmljacksoncorejackson-core2.9.7jackson-core-2.9.7.jar;C:mavenrepositorycomfasterxmljacksondatatypejackson-datatype-jdk82.9.7jackson-datatype-jdk8-2.9.7.jar;C:mavenrepositorycomfasterxmljacksondatatypejackson-datatype-jsr3102.9.7jackson-datatype-jsr310-2.9.7.jar;C:mavenrepositorycomfasterxmljacksonmodulejackson-module-parameter-names2.9.7jackson-module-parameter-names-2.9.7.jar;C:mavenrepositoryorgspringframeworkbootspring-boot-starter-tomcat2.1.1.RELEASEspring-boot-starter-tomcat-2.1.1.RELEASE.jar;C:mavenrepositoryorgapachetomcatembedtomcat-embed-core9.0.13tomcat-embed-core-9.0.13.jar;C:mavenrepositoryorgapachetomcatembedtomcat-embed-el9.0.13tomcat-embed-el-9.0.13.jar;C:mavenrepositoryorgapachetomcatembedtomcat-embed-websocket9.0.13tomcat-embed-websocket-9.0.13.jar;C:mavenrepositoryorghibernatevalidatorhibernate-validator6.0.13.Finalhibernate-validator-6.0.13.Final.jar;C:mavenrepositoryorgjbossloggingjboss-logging3.3.2.Finaljboss-logging-3.3.2.Final.jar;C:mavenrepositorycomfasterxmlclassmate1.4.0classmate-1.4.0.jar;C:mavenrepositoryorgspringframeworkspring-web5.1.3.RELEASEspring-web-5.1.3.RELEASE.jar;C:mavenrepositoryorgspringframeworkspring-beans5.1.3.RELEASEspring-beans-5.1.3.RELEASE.jar;C:mavenrepositoryorgspringframeworkspring-webmvc5.1.3.RELEASEspring-webmvc-5.1.3.RELEASE.jar;C:mavenrepositoryorgspringframeworkspring-aop5.1.3.RELEASEspring-aop-5.1.3.RELEASE.jar;C:mavenrepositoryorgspringframeworkspring-context5.1.3.RELEASEspring-context-5.1.3.RELEASE.jar;C:mavenrepositoryorgspringframeworkspring-expression5.1.3.RELEASEspring-expression-5.1.3.RELEASE.jar;C:mavenrepositoryorgspringframeworkbootspring-boot-starter-web-services2.1.1.RELEASEspring-boot-starter-web-services-2.1.1.RELEASE.jar;C:mavenrepositorycomsunxmlmessagingsaajsaaj-impl1.5.0saaj-impl-1.5.0.jar;C:mavenrepositoryjavaxxmlsoapjavax.xml.soap-api1.4.0javax.xml.soap-api-1.4.0.jar;C:mavenrepositoryorgjvnetmimepullmimepull1.9.10mimepull-1.9.10.jar;C:mavenrepositoryorgjvnetstaxexstax-ex1.8stax-ex-1.8.jar;C:mavenrepositoryjavaxxmlwsjaxws-api2.3.1jaxws-api-2.3.1.jar;C:mavenrepositoryjavaxxmlbindjaxb-api2.3.1jaxb-api-2.3.1.jar;C:mavenrepositoryjavaxactivationjavax.activation-api1.2.0javax.activation-api-1.2.0.jar;C:mavenrepositoryorgspringframeworkspring-oxm5.1.3.RELEASEspring-oxm-5.1.3.RELEASE.jar;C:mavenrepositoryorgspringframeworkwsspring-ws-core3.0.4.RELEASEspring-ws-core-3.0.4.RELEASE.jar;C:mavenrepositoryorgspringframeworkwsspring-xml3.0.4.RELEASEspring-xml-3.0.4.RELEASE.jar;C:mavenrepositorycommons-iocommons-io2.5commons-io-2.5.jar;C:mavenrepositoryorgprojectlomboklombok1.18.4lombok-1.18.4.jar;C:mavenrepositoryorgslf4jslf4j-api1.7.25slf4j-api-1.7.25.jar;C:mavenrepositoryorgspringframeworkspring-core5.1.3.RELEASEspring-core-5.1.3.RELEASE.jar;C:mavenrepositoryorgspringframeworkspring-jcl5.1.3.RELEASEspring-jcl-5.1.3.RELEASE.jar;C:mavenrepositoryorgapachecxfcxf-spring-boot-starter-jaxws3.3.1cxf-spring-boot-starter-jaxws-3.3.1.jar;C:mavenrepositoryorgapachecxfcxf-spring-boot-autoconfigure3.3.1cxf-spring-boot-autoconfigure-3.3.1.jar;C:mavenrepositoryorgapachecxfcxf-rt-frontend-jaxws3.3.1cxf-rt-frontend-jaxws-3.3.1.jar;C:mavenrepositoryxml-resolverxml-resolver1.2xml-resolver-1.2.jar;C:mavenrepositoryorgow2asmasm7.0asm-7.0.jar;C:mavenrepositoryorgapachecxfcxf-rt-bindings-soap3.3.1cxf-rt-bindings-soap-3.3.1.jar;C:mavenrepositoryorgapachecxfcxf-rt-wsdl3.3.1cxf-rt-wsdl-3.3.1.jar;C:mavenrepositorywsdl4jwsdl4j1.6.3wsdl4j-1.6.3.jar;C:mavenrepositoryorgapachecxfcxf-rt-databinding-jaxb3.3.1cxf-rt-databinding-jaxb-3.3.1.jar;C:mavenrepositoryorgapachecxfcxf-rt-bindings-xml3.3.1cxf-rt-bindings-xml-3.3.1.jar;C:mavenrepositoryorgapachecxfcxf-rt-frontend-simple3.3.1cxf-rt-frontend-simple-3.3.1.jar;C:mavenrepositoryorgapachecxfcxf-rt-ws-addr3.3.1cxf-rt-ws-addr-3.3.1.jar;C:mavenrepositoryorgapachecxfcxf-rt-ws-policy3.3.1cxf-rt-ws-policy-3.3.1.jar;C:mavenrepositoryorgapacheneethineethi3.1.1neethi-3.1.1.jar;C:mavenrepositoryjavaxvalidationvalidation-api2.0.1.Finalvalidation-api-2.0.1.Final.jar;C:mavenrepositoryorgapachecxfcxf-rt-transports-http3.2.2cxf-rt-transports-http-3.2.2.jar;C:mavenrepositoryorgapachecxfcxf-core3.2.2cxf-core-3.2.2.jar;C:mavenrepositorycomfasterxmlwoodstoxwoodstox-core5.0.3woodstox-core-5.0.3.jar;C:mavenrepositoryorgcodehauswoodstoxstax2-api3.1.4stax2-api-3.1.4.jar;C:mavenrepositoryorgapachewsxmlschemaxmlschema-core2.2.3xmlschema-core-2.2.3.jar;C:Program FilesJetBrainsIntelliJ IDEA 2018.3.3libidea_rt.jar" com.future.ws.WsApplication
Connected to the target VM, address: '127.0.0.1:8906', transport: 'socket'

  .   ____          _            __ _ _
 /\ / ___'_ __ _ _(_)_ __  __ _    
( ( )___ | '_ | '_| | '_ / _` |    
 \/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |___, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.1.1.RELEASE)

2022-05-14 12:15:53.083  INFO 15520 --- [           main] com.future.ws.WsApplication              : Starting WsApplication on DESKTOP-4C5EAT0 with PID 15520 (C:mefuture-learningwstargetclasses started by 32631 in C:mefuture-learningws)
2022-05-14 12:15:53.096  INFO 15520 --- [           main] com.future.ws.WsApplication              : No active profile set, falling back to default profiles: default
2022-05-14 12:15:55.552  INFO 15520 --- [           main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.ws.config.annotation.DelegatingWsConfiguration' of type [org.springframework.ws.config.annotation.DelegatingWsConfiguration$$EnhancerBySpringCGLIB$$8dab753d] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2022-05-14 12:15:55.642  INFO 15520 --- [           main] .w.s.a.s.AnnotationActionEndpointMapping : Supporting [WS-Addressing August 2004, WS-Addressing 1.0]
2022-05-14 12:15:56.375  INFO 15520 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2022-05-14 12:15:56.430  INFO 15520 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2022-05-14 12:15:56.431  INFO 15520 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/9.0.13
2022-05-14 12:15:56.454  INFO 15520 --- [           main] o.a.catalina.core.AprLifecycleListener   : The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [C:Program FilesJavajdk1.8.0_144bin;C:WINDOWSSunJavabin;C:WINDOWSsystem32;C:WINDOWS;C:ProgramDataOracleJavajavapath;C:WINDOWSsystem32;C:WINDOWS;C:WINDOWSSystem32Wbem;C:WINDOWSSystem32WindowsPowerShellv1.0;C:WINDOWSSystem32OpenSSH;C:nodejsdevnvm/npm;C:nodejsdevnodejs;C:nodejsdevnvm;C:Program FilesTortoiseSVNbin;C:Program FilesMicrosoft VS Codebin;C:apache-maven-3.2.2bin;C:Program FilesJavajdk1.8.0_144bin;C:Program FilesJavajdk1.8.0_144jrebin;C:Program FilesGitcmd;C:Program Files (x86)MySQLMySQL Server 5.7bin;c:Program Files (x86)Microsoft SQL Server100ToolsBinn;c:Program FilesMicrosoft SQL Server100ToolsBinn;c:Program FilesMicrosoft SQL Server100DTSBinn;C:Users32631AppDataLocalProgramsPythonPython36;C:driver;;C:Program FilesDockerDockerresourcesbin;C:ProgramDataDockerDesktopversion-bin;C:Users32631AppDataLocalProgramsPythonPython36Scripts;C:Users32631AppDataLocalProgramsPythonPython36;C:Users32631AppDataLocalMicrosoftWindowsApps;C:Users32631AppDataLocalatombin;;C:Users32631AppDataLocalProgramsFiddler;%USERPROFILE%AppDataLocalMicrosoftWindowsApps;.]
2022-05-14 12:15:56.850  INFO 15520 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2022-05-14 12:15:56.850  INFO 15520 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 3432 ms
2022-05-14 12:15:58.190  INFO 15520 --- [           main] o.a.c.w.s.f.ReflectionServiceFactoryBean : Creating Service {http://impl.ws.ws.future.com/}FutureWebServiceImplService from class com.future.ws.ws.FutureWebService
2022-05-14 12:15:58.462  INFO 15520 --- [           main] org.apache.cxf.common.jaxb.JAXBUtils     : Failed to create NoEscapeHandler
2022-05-14 12:15:58.944  INFO 15520 --- [           main] org.apache.cxf.endpoint.ServerImpl       : Setting the server's publish address to be /ws/api
2022-05-14 12:15:59.282  INFO 15520 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2022-05-14 12:15:59.850  INFO 15520 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2022-05-14 12:15:59.860  INFO 15520 --- [           main] com.future.ws.WsApplication              : Started WsApplication in 8.411 seconds (JVM running for 12.791)

观察日志,也可以发现webservice服务的创建日志:

4.2 查看wsdl

webservice服务怎么看服务起来了没,一定要通过访问wsdl来确认:

以前没使用springboot的时候,都需要手动指定cxfservlet,都会设定一个url格式,如下:

   
        CXFService
        org.apache.cxf.transport.servlet.CXFServlet
        1
    

    
        CXFService
        /services/*
    

其中services表示url前缀为这个时候,使用cxfservice来处理请求,但是在springboot这边不需要指定,也有一个默认的url前缀,默认的就是services,如果想要修改,可以参考webserviceconfig里头,已经被我注释的部分代码。

一个完整的wsdl的连接还需要endpoint的相关信息,这个也在webserviceconfig里头有定义:

endpoint.publish("/ws/api");

所以wsdl的连接为:http://localhost:8080/services/ws/api?wsdl

注意,?wsdl这几个字符不能缺省。

4.3 soapui模拟请求ws服务

 确保服务起来了,现在通过soapui默认客户端请求。

如下修改参数的名称:

修改后如下:

 修改name的值,点击左上角的绿色三角形按钮,就发起请求了。

5 焕然醒悟

到这一步之前,似乎一番风顺,没错,确实没啥问题,但是妈呀,人家的参数是直接放在body里头,而不是像我们在body里头又套了一层方法标签和参数标签。

那么难到是webservice还可以不需要方法标签直接请求?更多的内容下篇继续解密。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/884685.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号