Проблема
Интегрируйте 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;
}
}
” пользователь Bo ” вводится с помощью конфигурации компонента 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
Решение
Смотрите это неофициальное руководство JAXB , чтобы узнать, как отобразить интерфейс в JAXB.
Однако в вашем случае все по-другому, просто не имеет смысла создавать метод веб-службы для ” user Bo “, который требуется только для Di через Spring, а не для публикации клиенту.
Чтобы остановить ” wsgen “для создания веб-метода для ” пользователя Bo “, просто добавьте к нему ” @WebMethod(исключить) “, см. Ниже:
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 ” будет игнорировать ” user Bo ” методы получения и установки.
Оригинал: “https://mkyong.com/webservices/jax-ws/spring-jax-ws-xxx-is-an-interface-and-jaxb-cant-handle-interfaces/”