gpt4 book ai didi

java - JAXB 无法处理接口(interface)——我错过了什么?

转载 作者:搜寻专家 更新时间:2023-11-01 02:45:27 24 4
gpt4 key购买 nike

我正在使用 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

虽然这是一个老问题,但我想我会回答它,因为这是人们遇到的常见异常。

两种风格在hig​​h level上的区别如下

  • 文档:返回类型和方法参数在单独的 XSD 中清楚地解释了每种类型的详细信息 - 在自定义数据类型的情况下很有帮助(您的示例 ITransferResult java.util.List)。

  • RPC:类型以简单的方式在 WSDL 本身中定义。

关于java - JAXB 无法处理接口(interface)——我错过了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23196624/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com