Проблема
Интегрируйте Spring JAX-WS, см. Веб-сервис ниже:
package com.mkyong.user.ws;//imports...
@WebService()
public class PGUserWS {
//DI via Spring
private UserBo userBo;
public UserBo getUserBo() {
return userBo;
}
public void setUserBo(UserBo userBo) {
this.userBo = userBo;
}
@WebMethod(operationName = "addUser")
public boolean addUser(@WebParam(name = "userId")
String userId, @WebParam(name = "User")
User user) throws SOAPException {
userBo.addUser(userId, user);
return true;
}
}
« UserBo » - это DI через конфигурацию бина Spring XML. Но когда служба генерирует файлы службы (через wsgen ) для развертывания, появляется сообщение об ошибке « JAXB не может обрабатывать интерфейсы », см. Ниже:
Caused by: java.security.PrivilegedActionException:
com.sun.xml.bind.v2.runtime.IllegalAnnotationsException:
2 counts of IllegalAnnotationExceptions
com.mkyong.user.bo.UserBo is an interface, and JAXB can't handle interfaces.
this problem is related to the following location:
at com.mkyong.user.bo.UserBo
at private com.mkyong.user.bo.UserBo com.mkyong.user.ws.jaxws.SetUserBo.arg0
at com.mkyonguser.ws.jaxws.SetUserBo
com.mkyong.user.bo.UserBo does not have a no-arg default constructor.
this problem is related to the following location:
at com.mkyong.user.bo.UserBo
at private com.mkyong.user.bo.UserBo com.mkyong.user.ws.jaxws.SetUserBo.arg0
at com.mkyong.user.ws.jaxws.SetUserBo
Решение
Смотрите это unofficial JAXB guide чтобы узнать, как отобразить интерфейс в JAXB.
Однако ваш случай отличается, просто нет смысла генерировать метод веб-службы для « userBo », который требуется только для Di через Spring, а не для публикации на клиенте.
Чтобы прекратить « wsgen » для генерации веб-метода для « userBo », просто добавьте к нему «@WebMethod (exclude = true)` », см. Ниже:
package com.mkyong.user.ws;
//imports...
@WebService()
public class PGUserWS {
private UserBo userBo;
@WebMethod(exclude = true)
public UserBo getUserBo() {
return userBo;
}
@WebMethod(exclude = true)
public void setUserBo(UserBo userBo) {
this.userBo = userBo;
}
@WebMethod(operationName = "addUser")
public boolean addUser(@WebParam(name = "userId")
String userId, @WebParam(name = "User")
User user) throws SOAPException {
userBo.addUser(userId, user);
return true;
}
}
Теперь « wsgen » будет игнорировать методы получения и установки « userBo ».
ссылка://тег/jax-ws/[jax-ws]ссылка://тег/jaxb/[jaxb]ссылка://тег/весна/[весна]