Проблема
Интегрируйте 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/”