1. 1 不可撤销
  2. 2 小年兽 程嘉敏
  3. 3 手放开 李圣杰
  4. 4 迷人的危险3(翻自 dance flow) FAFA
  5. 5 山楂树之恋 程佳佳
  6. 6 summertime cinnamons / evening cinema
  7. 7 不谓侠(Cover 萧忆情Alex) CRITTY
  8. 8 神武醉相思(翻自 优我女团) 双笙
  9. 9 空山新雨后 音阙诗听 / 锦零
  10. 10 Wonderful U (Demo Version) AGA
  11. 11 广寒宫 丸子呦
  12. 12 陪我看日出 回音哥
  13. 13 春夏秋冬的你 王宇良
  14. 14 世界が终わるまでは… WANDS
  15. 15 多想在平庸的生活拥抱你 隔壁老樊
  16. 16 千禧 徐秉龙
  17. 17 我的一个道姑朋友 双笙
  18. 18 大鱼  (Cover 周深) 双笙
  19. 19 霜雪千年(Cover 洛天依 / 乐正绫) 双笙 / 封茗囧菌
  20. 20 云烟成雨(翻自 房东的猫) 周玥
  21. 21 情深深雨濛濛 杨胖雨
  22. 22 Five Hundred Miles Justin Timberlake / Carey Mulligan / Stark Sands
  23. 23 斑马斑马 房东的猫
  24. 24 See You Again Wiz Khalifa / Charlie Puth
  25. 25 Faded Alan Walker / Iselin Solheim
  26. 26 Natural J.Fla
  27. 27 New Soul Vox Angeli
  28. 28 ハレハレヤ(朗朗晴天)(翻自 v flower) 猫瑾
  29. 29 像鱼 王贰浪
  30. 30 Bye Bye Bye Lovestoned
  31. 31 Blame You 眠 / Lopu$
  32. 32 Believer J.Fla
  33. 33 书信 戴羽彤
  34. 34 柴 鱼 の c a l l i n g【已售】 幸子小姐拜托了
  35. 35 夜空中最亮的星(翻自 逃跑计划) 戴羽彤
  36. 36 慢慢喜欢你 LIve版(翻自 莫文蔚) 戴羽彤
  37. 37 病变(翻自 cubi) 戴羽彤
  38. 38 那女孩对我说 (完整版) Uu
  39. 39 绿色 陈雪凝
  40. 40 月牙湾 LIve版(翻自 F.I.R.) 戴羽彤
夜空中最亮的星(翻自 逃跑计划) - 戴羽彤
00:00 / 04:10

夜空中最亮的星 能否听清

那仰望的人 心底的孤独和叹息

夜空中最亮的星 能否记起

那曾与我同行 消失在风里的身影

我祈祷拥有一颗透明的心灵

和会流泪的眼睛

给我再去相信的勇气

越过谎言去拥抱你

每当我找不到存在的意义

每当我迷失在黑夜里

噢喔喔 夜空中最亮的星

请指引我靠近你

夜空中最亮的星 是否知道

那曾与我同行的身影 如今在哪里

夜空中最亮的星 是否在意

是等太阳先升起 还是意外先来临

我宁愿所有痛苦都留在心底

也不愿忘记你的眼睛

哦 给我再去相信的勇气

哦 越过谎言去拥抱你

每当我找不到存在的意义

每当我迷失在黑夜里

噢喔喔 夜空中最亮的星

请照亮我向前行 哒~

我祈祷拥有一颗透明的心灵

和会流泪的眼睛 哦

给我再去相信的勇气

哦 越过谎言去拥抱你

每当我找不到存在的意义

每当我迷失在黑夜里

噢喔喔 夜空中最亮的星

请照亮我向前行

webservice初体验-cxf

前言

最近一段时间,说忙也不是很忙,说闲但确实很少有时间能静下心来写点东西。但于我而言,做任何仪式感很重要,就算没时间坚持,那仪式感也不能丢,这是一种态度,也是最后的底线。今天的这篇推文,是很久以前就实践过了,前几天又整理了一下,上周没有发,本周必须要更新,不敢再堕落了,毕竟已经2020年了。好了开始正题吧。

1、依赖环境

      <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    
       <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-jaxws</artifactId>
            <version>${cxf.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http</artifactId>
            <version>${cxf.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http-jetty</artifactId>
            <version>${cxf.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-features-logging</artifactId>
            <version>${cxf.version}</version>
        </dependency>

    <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-core</artifactId>
      <version>2.11.1</version>
    </dependency>
    
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-slf4j-impl</artifactId>
      <version>2.11.1</version>
      <scope>test</scope>
    </dependency>   

注意: 上面的写法是maven加载包的方式,如果不想创建maven项目,可以直接把cxf/lib下的所有包加载到你的项目中也是可以的

2、基本写法

@WebService()
@SOAPBinding(style = SOAPBinding.Style.RPC)
public interface MyService {
    /**
     * 人员基本信息查询校验
     *
     * @param name
     * @return String
     * @throws GeneralException
     */
    @WebMethod
    String sayHello(@WebParam(name = "name") String name);
}
  • 注意:如果action不清楚的话,建议不写
实现类:
public class MyserviceImpl implements Myservice {
    @Override
public String sayHello(String name) {
    return name + ",Hello!";
}

注意:

实现类必须和接口在同一级目录下,否则会出现参数无法被识别的情况

3、发布方式

  • (1).默认的发布方式

我发布就是用的这种方式,将发布的代码写在监听器里,这种方式最简单

public class StartListener implements ServletContextListener {
private Logger log = LogManager.getLogger(StartListener.class);
    private final Myservice myservice = new MyserviceImpl();
    private Endpoint endpoint = null;
    String address="http://localhost:7001/myservice";
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
            endpoint = Endpoint.publish(address, myservice);
            log.info("发布MyserviceImpl webservice成功,地址:" + address);
    }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        if (this.endpoint.isPublished())
            this.endpoint.stop();
        log.error("服务被销毁……");
    }
}
  • (2)spring发布

    • 1)引入Spring包

    加入如下依赖

           <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-web</artifactId>
                <version>${spring.version}</version>
            </dependency>
    

    或者直接引入二进制包

    spring-aop-5.1.4.RELEASE.jar
    spring-beans-5.1.4.RELEASE.jar
    spring-context-5.1.4.RELEASE.jar
    spring-core-5.1.4.RELEASE.jar
    spring-expression-5.1.4.RELEASE.jar
    spring-web-5.1.4.RELEASE.jar
    
    • 2)在classPath下添加applicationContext-cxf.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans"  
   xmlns:amq="http://activemq.apache.org/schema/core" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
   xmlns:jaxws="http://cxf.apache.org/jaxws" xmlns:soap="http://cxf.apache.org/bindings/soap"  
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd  
       http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"> <!-- 这里配置的是webservice的实现类, --> 
 <!--相当于:JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();   -->
<jaxws:server address="/" serviceClass="lss.medicare.ydjy.ejb.YDJYHospServiceBean">  
   <!-- 配置消息拦截器 -->
   <!-- 这种方式已经过期 -->
 	<!--
   <jaxws:inInterceptors>  
       <bean class="org.apache.cxf.interceptor.LoggingInInterceptor"></bean>  
   </jaxws:inInterceptors>  
   <jaxws:outInterceptors>  
       <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"></bean>  
   </jaxws:outInterceptors>  
   -->
       <!-- 这个是替代类 -->
   <jaxws:features>
       <bean class="org.apache.cxf.ext.logging.LoggingFeature"/>
   </jaxws:features>
</jaxws:server>
</beans>  
  • 3)在web.xml中添加如下配置
<context-param>  
    <param-name>contextConfigLocation</param-name>  <!-- 
    这里配置我们上面添加的配置文件,保证配置可以正常加载
    -->
    <param-value>classpath:applicationContext-cxf.xml</param-value>  
</context-param>  
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
    <servlet-name>cxf</servlet-name>
    <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>cxf</servlet-name>
    <!-- 这里配置的是访问路径,我下面的配置的访问路径是  http://127.0.01:9901/webservice/webservice?wsdl -->
    <url-pattern>/webservice/*</url-pattern>
</servlet-mapping>

说明: 配置完成就可以启动你的服务了,如果没有意外,服务已经可以正常考虑

4、注意事项

4.1、客户端兼容性考虑:

  • 因为我这边的需求是要兼容旧版本的webservice(编码格式encoded,也就是weblogic 12C之前的版本),所以单使用cxf并没有解决我的问题,查阅很很多资料,搜索了很多博客,也尝试了很多方法,最后我的解决方案是引入axis1.4来生成客户端,来兼容老版本的webservice,以下是引入axis的操作:
依赖
  <dependency>
    <groupId>org.apache.axis</groupId>
    <artifactId>axis</artifactId>
    <version>1.4</version>
</dependency>

<dependency>
    <groupId>com.pansky.axis</groupId>
    <artifactId>jaxrpc</artifactId>
    <version>1.0.0</version>
</dependency>

<!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
    <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>1.1.1</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/commons-discovery/commons-discovery -->
    <dependency>
        <groupId>commons-discovery</groupId>
        <artifactId>commons-discovery</artifactId>
        <version>0.2</version>
    </dependency>

注意:

1、这里需要注意的是除了引入axis的包还要引入jaxrpc.jar这个包,当然这包在axis的lib下有,如果你本地用maven的话需要你手动添加到本地仓库,不是很清楚网上有没有,反正我是自己添加的;

2、这里还要添加的是commons-logging和commons-discovery,因为axis1.4依赖这两个包,不添加的话启动会报错

3、这一点和你发布的环境有关,因为我发布的是weblogic,应该这样说吧,都会有冲突,但是本地没有任何冲突,但是到正式环境启动的时候提示javax.xml.namespace.QName冲突,因为在jdk的rt.jar包下用这个类,在jaxrpc.jar中也存在,最后我的解决方法简单粗暴:

删除jaxrpc.jar下的这个类,因为我的项目完全没有用的这里包下的这个类,所以问题解决了,也没有其他问题

接口Java客户端代码生成
wsdl2java -p io.github.syske.webservice.client -d java -client http://127.0.0.1/webservice

-p 包名

-d 保存路径

-client 服务端地址

posted @ 2020-01-18 08:35  云中志  阅读(380)  评论(0编辑  收藏  举报