WebService使用详解

        WebService其实就是远程调用服务,分为服务端开发和客户端开发。看上去很厉害的样子,其实使用起来很简单。下面介绍不使用框架和使用CXF框架两种使用WebService的方法。

一、不使用框架的WebService

1、服务端代码,生成供客户端使用的方法

/*
@WebService:是一个注解,用在类上指定将此类发布成一个ws
 */
@WebService
public class JwsServiceHello {

    /*
    供客户端调用的方法,该方法是非静态的,会被发布
     */
    public String getValue(String name){
        return "欢迎你!"+name;
    }

    /*
    方法上加@WebMethod(exclude = true)后,此方法不被发布
     */
    @WebMethod(exclude = true)
    public String getHello(String name){
        return "你好!"+name;
    }

    /*
    静态方法不会发布
     */
    public static String getString(String name){
        return "再见!"+name;
    }

    /*
    *通过EndPoint(端点服务)发布一个WebService,参数包括本地的服务地址和提供服务的类
    *发布成功后再浏览器输入http://188.188.181.151:8080/Service/ServiceHello?wsdl即可看到XML格式代码
     */
    public static void main(String[] args){
        Endpoint.publish("http://188.188.181.151:8080/Service/ServiceHello",new JwsServiceHello());
        System.out.println("发布成功");
    }
}

2、编译运行

然后在浏览器器输入http://188.188.181.151:8080/Service/ServiceHello?wsdl,如果看到XML格式的代码即表示发布成功

3、客户端代码

1、通过IDE生成使用webService的类,.将地址上的文件下载下来

2、删除不需要的class文件,剩下如下图

3、写调用方法调用下载下来的WebService中的java类中的方法

总结:如何发布一个Web服务

1)在类上添加@WebService注解(位于javax.jws.WebService包中)

2)通过EndPoint(端点服务)发布一个WebService(该类的publish方法接收两个参数,一个是本地的服务地址,二是提供服务的类。位于 javax.xml.ws.Endpoint包中)

3)类上添加注解@WebService,类中所有非静态方法都会被发布;静态方法和final方法不能被发布;方法上加@WebMentod(exclude=true)后,此方法不被发布;

 

二、使用CXF框架的WebService

1、添加依赖

pom.xml

<!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-rt-frontend-jaxws -->
<dependency>
	<groupId>org.apache.cxf</groupId>
	<artifactId>cxf-rt-frontend-jaxws</artifactId>
	<version>3.2.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-rt-transports-http -->
<dependency>
	<groupId>org.apache.cxf</groupId>
	<artifactId>cxf-rt-transports-http</artifactId>
	<version>3.2.6</version>
</dependency>

2、写webService接口

@WebService
public interface LanguageService {
    public String getLanguage(@WebParam(name = "position")int position);
}

3、webService具体实现方法

@WebService(endpointInterface = "com.example.demo.cxf.LanguageService")
public class LanguageServiceImpl implements LanguageService{
    @Override
    public String getLanguage(int position) {
        String language =null;
        switch (position){
            case 1:
                language="java";
                break;
            case 2:
                language="c";
                break;
            case 3:
                language="Objective-C";
                break;
            case 4:
                language="C#";
                break;
             default:
                 break;
        }
        return language;
    }
}

4、写Config文件发布webService服务

@Configuration
public class CXFConfig {

    /*
    *ServletRegistrationBean是由spring boot提供专门来注册servlet的
    *这个是添加CXF的Servlet,处理webservice的请求
     */
    @Bean
    public ServletRegistrationBean servletRegistrationBean(){
        return new ServletRegistrationBean(new CXFServlet(),"/webservice/*");
    }

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

    /*
    创建提供WebService的服务类
     */
    @Bean
    public LanguageService getLanguageService(){
        return new LanguageServiceImpl();
    }

    /*
    发布WebService服务
     */
    @Bean
    public Endpoint getEndpoint(){
        EndpointImpl endpoint = new EndpointImpl(springBus(),getLanguageService());
        endpoint.publish("/language");
        return endpoint;
    }
}

5、启动程序

这里我使用的springBoot,在启动的过程中报错:Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Tomcat.class]

需要在启动类的@EnableAutoConfiguration或@SpringBootApplication中添加exclude = {DataSourceAutoConfiguration.class},排除此类的autoconfig。启动以后就可以正常运行。

另外会出现警告:No MyBatis mapper was found in '[com.pollyduan.cms],可以通过编写的一个mapper接口进行解决。

启动程序后在浏览器输入:http://188.188.181.151:8080/webservice/language?wsdl,出现XML格式的内容即发布成功

6、编写客户端

这里客户端的使用也可以用上一个方法中客户端的使用方法,也可以通过工厂方法创建客户端调用WebService。下面的代码是通过工厂方法创建客户端的。

import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;

public class CXFClient {
    public static void main(String[] args) {
        //创建WebService客户端代理工厂
        JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
        //注册WebService接口
        factory.setServiceClass(LanguageService.class);
        //设置WebService地址
        factory.setAddress("http://188.188.181.151:8080/webservice/language?wsdl");
        LanguageService languageService = (LanguageService) factory.create();
        System.out.println(languageService.getLanguage(1));
    }
}

成功调用webservice的方法

 

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值