webservice遇到的问题

一般的工作原理

WebService就是一个应用程序,它提供一种通过web方式访问的api。
解决两个系统或者(应用程序)之间的远程调用…
WebService最基本的组成部分就是客户端,服务端.
参考文档:
https://www.meiwen.com.cn/subject/knfjlftx.html
https://blog.csdn.net/btt2013/article/details/50727846(这个更加详细)

  1. 编写服务端

`1.1先编写接口``
package service;
public interface WeatherInterface {
public String queryWeather(String cityName);

}
1.2接口实现类

package service;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.xml.bind.annotation.XmlSeeAlso;
import javax.xml.ws.Action;
import javax.xml.ws.RequestWrapper;
import javax.xml.ws.ResponseWrapper;
@WebService

public class WeatherInterfaceImpl implements WeatherInterface {

	  public String queryWeather(String cityName) {
	        System.out.println("服务端:"+cityName);
	        String weather = "晴";
	        return weather;
	    }
	}

1.3服务启动类

package service;

import javax.jws.WebService;
import javax.xml.ws.Endpoint;

public class WeatherService {
    public static void main(String[] args) {
        Endpoint.publish("http://localhost:8899/esb/server", new WeatherInterfaceImpl());
        System.out.println("web service success");
    }
}

2、运行服务启动类,检查wsdl文件
在游览器中输入http://localhost:8899/esb/server?wsdl在这里插入图片描述服务启动正常后开始编写客户端,客户端要为他单独放在一个包里边,不然用jaw自动生成客户端代码时会与服务端的接口实现类有一个重名,然后会覆盖掉它,引起错误
在这里插入图片描述wsimport -s . +服务说明书(wsdl)的地址,生成本地的class文件与java文件
例如:wsimport -s . http://localhost:8899/esb/server?wsdl
在cmd中,你可以先cd至你想要的目录下使用这个命令,然后就会在这个目录下生成一个service的目录。里面有class和Java文件,你把他拷贝至你的客户端包目录下就好
编写客户端

package client.service;

import client.service.WeatherInterfaceImpl;
import client.service.WeatherInterfaceImplService;

public class WeatherClient {
    public static void main(String[] args) {
        //创建服务视图
        WeatherInterfaceImplService weatherInterfaceImplService = new WeatherInterfaceImplService();
        //获取服务实现类
        WeatherInterfaceImpl weatherInterfaceImpl = weatherInterfaceImplService.getPort(WeatherInterfaceImpl.class);
        //调用查询方法
        String weather = weatherInterfaceImpl.queryWeather("上海");
        System.out.println(weather);
    }
}
`
出现的问题;
运行客户端的时候出现了Two classes have the same XML type name
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200527110253122.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mjk4NzEzMQ==,size_16,color_FFFFFF,t_70)
找到报错图片里面的那两个类,在类上的注解加上namespace = "http://namespace.thats.not.the.same.as.the.generated",如下所示:

第一个类:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200527110420301.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mjk4NzEzMQ==,size_16,color_FFFFFF,t_70)

第二个类:
![在这里插入图片描述](https://img-blog.csdnimg.cn/2020052711043465.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mjk4NzEzMQ==,size_16,color_FFFFFF,t_70)

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值