【发布时间】:2011-12-13 17:53:47
【问题描述】:
我正在使用 JAX-WS 构建 Web 服务。我有一个奇怪的问题,@WebParam 的注释 @XmlElement(required=true) 在某些 @WebService 类中有效,但在其他某些类中无效。
我在两个@WebService 类中有非常相似的代码。什么可能导致这个问题?参数类型还是实体类?
编辑:添加示例代码
我有两个网络服务:
@WebService(name = "ClubMemberPortType", serviceName = "ClubMemberService", portName = "ClubMemberSoapPort", targetNamespace = "http://club.com/api/ws")
public class ClubMemberWS {
@WebMethod(operationName = "findClubMembersByClubId", action = "urn:findClubMembersByClubId")
@WebResult(name = "club_membership")
public List<ClubMembership> findClubMembershipsByClubId(@XmlElement(required=true)
@WebParam(name = "club_id") String clubId,
@WebParam(name = "status") StatusEnum status){
...
}}
和
@WebService(name = "ClubPortType", serviceName = "ClubService", portName = "ClubSoapPort", targetNamespace = "http://club.com/api/ws")
public class ClubWS {
@WebMethod(operationName = "findClubByClubId", action = "urn:findClubByClubId")
@WebResult(name = "club")
public Club findClubByClubId(@XmlElement(required=true)
@WebParam(name = "club_id") String clubId) {
...
}}
为第一个 web 方法生成的架构是:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://club.com/api/ws">
<soapenv:Header/>
<soapenv:Body>
<ws:findClubMembersByClubId>
<club_id>?</club_id>
<!--Optional:-->
<status>?</status>
</ws:findClubMembersByClubId>
</soapenv:Body>
</soapenv:Envelope>
为第二种网络方法生成的架构是:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://club.com/api/ws">
<soapenv:Header/>
<soapenv:Body>
<ws:findClubByClubId>
<!--Optional:-->
<club_id>?</club_id>
</ws:findClubByClubId>
</soapenv:Body>
</soapenv:Envelope>
所以第一个工作正常,第二个不工作。这怎么可能? :(
【问题讨论】:
-
这两种情况的任何代码示例?您面临的实际问题(例如异常、更好的行为描述等)?
-
请添加错误的stacktrace
-
当我添加@XmlElement 得到错误
The annotation @XmlElement is disallowed for this location例如public boolean validateRegistration(@XmlElement(required = true) @WebParam String devicedId。 Java 1.6.45
标签: java annotations jax-ws required