webService(一)快速的实现一个基于Jws的WebService项目

1、服务器端建立

1.1、创建接口

package com.chb.service;
import javax.jws.WebService;
/**
 * 1.1、创建接口
 */
public interface IMyService {
    public int add(int a, int b);
    public int mins(int a, int b);
}



1.2、创建实现类

package com.chb.service;
import javax.jws.WebService;
public class MyServiceImpl implements IMyService{
    @Override
    public int add(int a, int b) {
        System.out.println(a + "+" + b + "=" + (a+b));
        return a + b;
    }

    @Override
    public int mins(int a, int b) {
        System.out.println(a + "-" + b + "=" +(a-b));
        return a - b;
    }
}


1.3、开启服务

package com.chb.service;

import javax.xml.ws.Endpoint;

public class MyServer {
    public static void main(String[] args) {
        //发布的地址
        String address = "http://localhost:6666/ns";
        Endpoint.publish(address, 
                new MyServiceImpl());//实现的类

}


1.3.1 启动报错:
报错:Exception in thread "main" java.lang.IllegalArgumentException: class com.chb.service.MyServiceImpl has neither @WebService nor @WebServiceProvider annotation    

1.3.2 、关注两个东西
    //SEI (Service EndPoint Interface)  服务提供的接口-->IMyService
    //SIB (Service implemention Bean)   服务实现的Bean

1.3.3、接口与实现类需要添加下面注解

//接口与实现类需要添加下面注解
@WebService
public interface IMyService {...}

@WebService(endpointInterface="com.chb.service.IMyService")
public class MyServiceImpl implements IMyService{...}


1.3.4、访问 http://localhost:9999/ns?wsdl, 注意后面一定要加?wsdl, 这就是我们公开给网上的某些接口。


1.3.5、我们通过解析这个wsdl, 就可以调用java的方法。不用使用new创建对象。


思考:IMyService iMyService = service.getPort(IMyService.class);
如果别人使用, 也需要有这个接口, 这样就太依赖于这个接口, 不可能别人使用你的服务, 还要寻找你要这个接口, 这样也无法跨平台。

问题: 依赖与IMservice, 需要一种方案: 可以通过wsdl生成本地的类, 生成的类不应该根据服务的平台, 而是根据自己的平台, wsdl可能是java, .net,或其他语言开发的, 我们需要解决这个问题。


2. 解决方案:wsimport的使用就有了接口的类


2.1、新建一个项目,作为客户端,将wsimport生成的目录拷贝到src下, 可以看到生成了很多东西, 有了IMyService接口。


注意上面的MyServiceImplService不是IMyService的实现类, 而是javax.xml.ws.Service的实现类
 

MyServiceImplService extends Service


2.2、MyServiceImplService提供一个很好的方法供我们获取IMService,
 

  /**
     * @return
     *     returns IMyService
     */
    @WebEndpoint(name = "MyServiceImplPort")
    public IMyService getMyServiceImplPort() {
        return super.getPort(new QName("http://service.chb.com/", "MyServiceImplPort"), IMyService.class);
    }


2.3、获取IMyService,调用方法

package com.chb.client;

import com.chb.service.IMyService;
import com.chb.service.MyServiceImplService;

public class TestClient {
    public static void main(String[] args) {
        MyServiceImplService msis = new MyServiceImplService();
        //获取IMyService, 简单多了
        IMyService iMyService = msis.getMyServiceImplPort();

        System.out.println(iMyService.mins(12, 29));
    }
}


3、wsdl到底是什么


3.1、types: 用来定义访问的类型
SOAP (Simple Object Access Protocol), 如何传输SOAP, 就是通过SOAP Message


3.2、Message:SOAP, 请求一个消息, 返回一个消息, 所以要传输的消息两倍与服务提供的方法, 可能更多。


3.3、portType :接下来, 需要指明在服务器端,我们用哪个接口来进行操作。这就需要portType.


3.4、binding: 
消息该以什么形式呈献给客户, 
  有两种方式: style=”document” or style=”rpc”
消息以什么样的形式传递
  <soap:body use="literal"/>, 以xml形式传递。


3.5、 servcice : 指定服务所发布的名称

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是使用Idea写一个Spring Boot项目开发Web Service的Demo: 1. 创建Spring Boot项目 在Idea中创建一个新的Spring Boot项目,选择Web和Spring Web Services依赖项。 2. 创建一个Web Service 在src/main/java目录下创建一个包,命名为com.example.demo.webservice,然后在该包下创建一个类,命名为HelloWebService。 ``` package com.example.demo.webservice; import org.springframework.stereotype.Component; import javax.jws.WebMethod; import javax.jws.WebService; @Component @WebService(serviceName = "HelloWebService") public class HelloWebService { @WebMethod public String sayHello(String name) { return "Hello, " + name + "!"; } } ``` 这里我们使用了注解@WebService来标注这是一个Web Service,并使用@WebMethod标注了其中一个方法。我们还使用了@Component注解来将此类标记为Spring Bean。 3. 配置Web Service 在application.properties文件中添加以下配置: ``` # Web Service spring.webservices.path=/ws ``` 这将Web Service的路径设置为/ws。 4. 发布Web Service 在启动类中添加以下代码: ``` import com.example.demo.webservice.HelloWebService; import org.apache.cxf.Bus; import org.apache.cxf.jaxws.EndpointImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import javax.annotation.PostConstruct; import javax.xml.ws.Endpoint; @SpringBootApplication public class DemoApplication { @Autowired private Bus bus; @Autowired private HelloWebService helloWebService; public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } @PostConstruct public void endpoint() { EndpointImpl endpoint = new EndpointImpl(bus, helloWebService); endpoint.publish("/hello"); } } ``` 这里我们使用了CXF框架来发布Web Service。在启动类中,我们注入了一个Bus对象和一个HelloWebService对象,并使用EndpointImpl将Web Service发布到路径/hello。 5. 测试Web Service 现在,我们可以使用任何Web Service客户端来测试我们的Web Service了。在浏览器中访问http://localhost:8080/ws/hello?wsdl,你应该能够看到自动生成的WSDL描述文件。现在,你可以使用SoapUI等工具来测试我们的Web Service。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值