我有一个与Spring集成的Java优先Web服务。服务界面很简单:
@WebService
public interface ContactService {
public void addContact(@WebParam(name="contact") Contact contact);
public List<Contact> listContact();
public void removeContact(@WebParam(name="id") Integer id);
}
实施:
@WebService(endpointInterface = "com.foobar.contact.service.ContactService")
@Service
public class ContactServiceImpl implements ContactService {
// methods
}
模特:
@XmlAccessorType( XmlAccessType.FIELD )
public class Contact {
private Integer id;
private String firstname;
private String lastname;
private String email;
private String telephone;
}
如果我使用Maven插件cxf-java2ws-plugin
,则生成的WSDL是正确的。但是,如果没有指定WSDL,那么运行时生成的CXF就不起作用了。
例如,在cxf-java2ws-plugin
生成的那个中,返回类型正确地以tns
为前缀:
<xs:complexType name="listContactResponse">
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="return" type="tns:contact"/>
</xs:sequence>
在运行时生成的那个中,contact
没有前缀,因此无法解析:
<xsd:complexType name="listContactResponse">
<xsd:sequence>
<xsd:element maxOccurs="unbounded" minOccurs="0" name="return" type="contact"/>
</xsd:sequence>
两个WSDL都包含正确的复杂类型contact
。
如何告诉CXF / JAX-WS contact
是否在WSDL中定义的类型?
答案 0 :(得分:1)
查看xsd,使用wsdl自动生成:
schemaLocation="http://<server>:<port>/<app>/<webservice>?xsd=1