Problem
Integrieren Sie Spring + JAX-WS, siehe Webdienst unten:
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; } }
Das " userBo " ist DI über die Konfiguration des Spring XML-Beans. Wenn der Dienst jedoch die Dateien des Diensts (über wsgen ) für die Bereitstellung generiert, wird die Fehlermeldung " JAXB kann Schnittstellen nicht verarbeiten " angezeigt, siehe unten:
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
Lösung
In diesem unofficial JAXB-Handbuch erfahren Sie, wie Sie das Interface in JAXB zuordnen.
Ihr Fall ist jedoch anders, es macht einfach keinen Sinn, eine Web-Service-Methode für „ userBo “ zu generieren, die nur für Di via Spring erforderlich ist und nicht für den Client.
Um " wsgen " anzuhalten, um die Webmethode für " userBo " zu generieren, kommentieren Sie sie einfach mit "@WebMethod (exclude = true)", siehe unten:
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; } }
Jetzt ignoriert " wsgen " die Getter- und Setter-Methoden " userBo ".
Verbindung://Tag/Jax-ws/[Jax-Ws] spring