Spring WebFault上的编组错误
我有以下课程:Spring WebFault上的编组错误,spring,soap,cxf,Spring,Soap,Cxf,我有以下课程: @WebFault(faultBean="com.myapp.FaultBean", name="MyWSException", targetNamespace = "exception.myapp.com") public class MyWSException extends RuntimeException { /** * */ private static final long serialV
@WebFault(faultBean="com.myapp.FaultBean", name="MyWSException", targetNamespace = "exception.myapp.com")
public class MyWSException extends RuntimeException {
/**
*
*/
private static final long serialVersionUID = 5911956366562576341L;
private FaultBean faultBean;
public MyWSException(String message, FaultBean faultBean) {
super(message);
this.faultBean = faultBean;
}
public MyWSException(String message, Throwable cause, FaultBean faultBean) {
super(message);
this.faultBean = faultBean;
}
public FaultBean getFaultInfo() {
return faultBean;
}
}
这是我的FaultBean:
@XmlType(name="WSFaultType", namespace = "exception.myapp.com")
@XmlRootElement(name="MyWSException")
@XmlAccessorType(XmlAccessType.FIELD)
public final class FaultBean {
@XmlElement(name="message", required=true)
private String message;
@XmlElement(name="code", required=true)
private String code;
public FaultBean(){
super();
}
public FaultBean( String message, String code) {
super();
this.message= message;
this.code = code;
}
public final String getMessage() {
return message;
}
public final void setMessage(String message) {
this.message= message;
}
public final String getCode() {
return code;
}
public final void setCode(String code) {
this.code = code;
}
}
现在,我有两个AOP类,一个用于捕获所有自定义异常,另一个用于在提交事务时捕获Spring的异常,以便捕获持久层的所有意外错误:
@Aspect
public class SpringExceptionAspect {
@Pointcut("execution(public * *(..))")
private final void anyPublicOperation() {
}
@Pointcut("execution(void org.springframework.transaction.PlatformTransactionManager.commit(*))")
public final void anyTransactionError() {
}
@AfterThrowing(pointcut = "anyPublicOperation() && anyTransactionError()", throwing = "error")
public void catchException(JoinPoint jp, Throwable error) {
FaultBean bean = new FaultBean(error.getMessage(), "ERRCODE");
throw new MyWSException("Persistence error:", bean);
}
}
@Aspect
public class CustomExceptionAspect{
@Pointcut("execution(public * *(..))")
private final void anyPublicOperation() {
}
@Pointcut("within(com.myapp.service..*)")
public final void anyServerMethod() {
}
@AfterThrowing(pointcut = "anyPublicOperation() && anyServerMethod()", throwing = "error")
public void catchException(JoinPoint jp, Throwable error) {
FaultBean bean = new FaultBean(error.getMessage(), "ERRCODE");
throw new MyWSException("Error:", bean);
}
}
现在,当异常在第二个方面被捕获时(当我抛出我的自定义异常时),一切正常,我得到了预期的soap:fault响应。但是,当捕捉到Spring自己的事务异常时,我会得到以下响应:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<soap:Fault>
<faultcode>soap:Server</faultcode>
<faultstring
Marshalling Error: neither class com.myapp.FaultBean nor any of its superclasses are known to this conext</faultstring>
</soap:Fault>
</soap:Body>
</soap:Envelope>
soap:服务器