我正在尝试生成一个wsdl。该服务的构建如下所示。没有什么不寻常的,但我确实有我想抛出的异常,位于一个单独的包中,因此出现在与生成的wsdl中的服务和实体不同的命名空间中。检索wsdl文件(由http://service.example.com/?wsdl生成)会生成下面未验证的文件,因为Exception不在同一名称空间中。有没有办法生成一个wsdl验证,同时在一个单独的包中具有Exception(请记住,我确实希望在其他服务中重用该异常,在其他命名空间中也是如此)。
package com.example.exception;
XmlAccessorType(XmlAccessType.FIELD)
@XmlType(namespace="http://exception.example.com")
public class ServiceException extends Exception {
public ServiceException() {
super();
}
.....
}
package com.example.service;
public interface DoSomethingService {
@ResponseWrapper(localName = "findResponseTag")
public Entity find( @WebParam(name="input") String input ) throws ServiceException;
.....
}
package com.example.service;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(namespace = "http://entity.example.com")
public class Entity {
@XmlAttribute
private String name;
public Entity(){
}
.....
}
生成的wsdl:下面引用的ServiceException是ns4而不是tns。
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:tns="http://service.example.com/"
xmlns:SOAP11="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:SOAP="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns4="http://exception.example.com/"
name="DoSomethingServiceService" targetNamespace="http://service.example.com/">
<wsdl:types>
<xs:schema xmlns:ns1="http://service.ancillary.model.vsp.com"
xmlns:tns="http://exception.example.com/" xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://exception.example.com/" version="1.0">
<xs:import namespace="http://exception.example.com" />
<xs:element name="ServiceException" type="tns:ServiceException" />
<xs:complexType name="ServiceException">
.....
</xs:complexType>
</xs:schema>
..........
<wsdl:portType name="DoSomethingService">
<wsdl:operation name="find">
<wsdl:input message="tns:find"></wsdl:input>
<wsdl:output message="tns:findResponse"></wsdl:output>
<wsdl:fault name="ServiceException" message="ns4:ServiceException"></wsdl:fault>
</wsdl:operation>
</wsdl:portType>
</wsdl:types>
.....
</wsdl:definitions>