Java Jax-WS接口作为参数
尝试使用接口作为jax-ws-web服务的参数 接口Java Jax-WS接口作为参数,java,web-services,interface,jaxb,Java,Web Services,Interface,Jaxb,尝试使用接口作为jax-ws-web服务的参数 接口 import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; @XmlRootElement @XmlJavaTypeAdapter(TransactionBase.TransactionableAdapter.class) public interface Transactiona
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
@XmlRootElement
@XmlJavaTypeAdapter(TransactionBase.TransactionableAdapter.class)
public interface Transactionable {
public int getRecid() ;
public void setRecid(int recid) ;
}
实施
import com.tr.route.transactions.Transactionable;
@XmlRootElement
@XmlType(name = "Transactionable")
public class TransactionBase implements Transactionable{
private int recid;
private String ref;
public TransactionBase(String type ) {
System.out.println("TransactionBase.Constructor with param:" + type);
}
public static TransactionBase valueOf(String allObject) {
System.out.println("TransactionBase.valueOf:");
TransactionBase rezult = new TransactionBase(allObject);
return rezult;
}
public int getRecid() {
return recid;
}
public void setRecid(int recid) {
this.recid = recid;
}
// adapter
public static class TransactionableAdapter
extends XmlAdapter<TransactionBase, Transactionable> {
@Override
public TransactionBase marshal(Transactionable o)
throws Exception {
System.out.println("TransactionableAdapter:mashal:");
return (TransactionBase)o;
}
@Override
public Transactionable unmarshal(TransactionBase o)
throws Exception {
System.out.println("TransactionableAdapter:unmashal:");
return (Transactionable)o;
}
}
}
}
无论我做了什么,我都会得到:
Caused by: com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 2 counts of IllegalAnnotationExceptions Transactionable is an interface, and JAXB can't handle interfaces.
请不要将我重定向到:
稍后编辑:
我正在使用jersey实现。您需要为参数类型使用一些JavaBean类,否则,JAX-RS将无法在调用方法之前为您创建和填充参数 编辑: 引述自: 通常,方法参数的Java类型可能: 是原始类型 具有接受单个字符串参数的构造函数 有一个名为valueOf或fromString的静态方法,该方法接受单个字符串参数(例如,请参见Integer.valueOf(String)和java.util.UUID.fromString(String)) 拥有javax.ws.rs.ext.ParamConverterProvider JAX-rs扩展SPI的注册实现,该扩展SPI返回一个javax.ws.rs.ext.ParamConverter实例,该实例能够对类型进行“from string”转换。或 是列表、集合或分类集合,其中T满足上述2或3。生成的集合是只读的
为什么要坚持在接口上保留jaxb注释?为什么不把它们放在TransactionBase上呢?嗨,适配器似乎没有被调用,因为我从来没有在任何调用日志中看到它。您想说我不能使用接口作为参数或为接口进行一些映射吗?你能发送一个文档链接吗?嗨@Michael Bar Sinai谢谢你的帮助。我在方法中添加了@XmlElement(type=TransactionBase.class),将Long改为int,添加了constructor和valueOf()方法,现在我得到了一个不同的错误。InboundJAXRResponse{ClientResponse{method=POST,uri=,status=415,reason=Unsupported Media Type}如何发送数据?如果是JSON,则需要向HTTP请求添加一个“Content-type:application/JSON”头。Hi@michaelClient client=ClientBuilder.newClient();WebTarget webResource=client.target(“);Transactionable transaction=new TransactionBase();transaction.setRecid(100);Response-Response=client.target(“).request().accept(MediaType.APPLICATION_XML).post(Entity.Entity(transaction,MediaType.APPLICATION_XML));我只使用xml,没有JSONOK,所以请尝试添加“Content-type:application/xml”头。
Caused by: com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 2 counts of IllegalAnnotationExceptions Transactionable is an interface, and JAXB can't handle interfaces.