我正在使用 Jax-ws(或 JAXB,不确定,无论如何......)熟悉 Java 中的 Web 服务。
我用一个网络服务创建了一个小项目。 WS 有唯一的端点称为 transfer 并返回继承 ITransferResult 接口(interface)的对象。
网络服务契约(Contract)
//Service Endpoint Interface
@WebService
@SOAPBinding(style = Style.RPC)
public interface IBankWebSrv {
@WebMethod
ITransferResult transfer(String accountNumber, double amount);
}
网络服务实现
//Service Implementation
@WebService(endpointInterface = "Contracts.IBankWebSrv")
public class BankWebSrv implements IBankWebSrv {
@Override
public ITransferResult transfer(String accountNumber, double amount) {
ITransferResult result = new TransferResult();
// TODO logic here
result.setSuccessful(true);
return result;
}
}
TransferResult 合约
@XmlJavaTypeAdapter(TransferResult.class)
public interface ITransferResult {
boolean isSuccessful();
void setSuccessful(boolean successful);
}
TransferResult 实现
public class TransferResult extends XmlAdapter<TransferResult, ITransferResult>
implements ITransferResult {
@XmlElement
boolean successful;
public boolean isSuccessful() {
return this.successful;
}
public void setSuccessful(boolean successful) {
this.successful = successful;
}
@Override
public TransferResult marshal(ITransferResult v) throws Exception {
return (TransferResult) v;
}
@Override
public ITransferResult unmarshal(TransferResult v) throws Exception {
return (ITransferResult) v;
}
}
当我发布网络服务时,出现以下错误:
Exception in thread "main" javax.xml.ws.WebServiceException: Unable to create JAXBContext...
Caused by: java.security.PrivilegedActionException: com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions ITransferResult is an interface, and JAXB can't handle interfaces. this problem is related to the following location: at ITransferResult
我查看了 SO 的答案并应用了最重复的提示,但它们都没有对我有用。
我错过了什么?
最佳答案
您可能需要在 @SOAPBinding(style = Style.RPC)
的声明中将样式更改为 DOCUMENT 而不是 RPC
虽然这是一个老问题,但我想我会回答它,因为这是人们遇到的常见异常。
两种风格在high level上的区别如下
文档:返回类型和方法参数在单独的 XSD 中清楚地解释了每种类型的详细信息 - 在自定义数据类型的情况下很有帮助(您的示例
ITransferResult
或java.util.List
)。RPC:类型以简单的方式在 WSDL 本身中定义。
关于java - JAXB 无法处理接口(interface)——我错过了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23196624/