Проблема
Интегрируйте 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]ссылка://тег/весна/[весна]