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