两个类具有相同的 XML 类型名称。请使用 @XmlType.name 和 @XmlType.namespace 为类分配不同的名称。
说明:
此问题是在webservice服务通过wsimport指令生成客户端之后,编写测试代码测试时的报错。
问题出现原因:
由于生成客户端时,没有指定路径,因此默认生成的路径还是原先服务端提供的路径。
解决办法:
通过wsimport指令指定路径生成客户端,然后重新加载。
过程详情:
首先,构建一个webservice服务端:
package com.learn.Server;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;
@WebService
public class MyFirstWebservice {
public String testWebService(String content){
System.out.println("服务端收到了:" + content);
String result = "Hello ," + content;
return result ;
}
public static void main(String[] args){
String address = "http://localhost:9090/MyFirstWebService";
Endpoint.publish(address, new MyFirstWebservice());
System.out.println("starting......");
}
将其启动,然后执行:wsimport -s . http://localhost:9090/MyFirstWebService?wsdl 获得客户端文件
生成客户端:
将其copy到对应的workspace工程目录下,然后编写测试代码:
package com.learn.webservice;
import com.learn.Client.MyFirstWebservice;
import com.learn.Client.MyFirstWebserviceService;
public class FirstWebservice {
public static void main(String[] args) {
MyFirstWebserviceService service = new MyFirstWebserviceService();
MyFirstWebservice port = service.getMyFirstWebservicePort();
String result = port.testWebService("zhangsan");
System.out.println(result);
}
}
启动运行就会看到如题报错!!!!!!!
至于问题原因就是,在MyFirstWebService.java文件中:
处,classname因为构建的时候没有重新指定构建文件目录,因此会保留原本的服务器端包名。因此改正方法就是:
1) 重新构建:进入工程src目录后,执行 :
wsimport -keep -p com.learn.webservice(测试包名) http://localhost:9090/MyFirstWebService?wsdl
重新生成客户端后Classname为:
重新运行测试代码,即可。
2) 自己动手修改classname中的参数,修改为本工程客户端存放的TestWebService地址(本文中为:com.learn.Client.TestWebService和com.learn.Client.TestWebServiceResponse),两处都需要改哦!