替换java.lang.Object绑定到匿名类型
我收到了错误消息: com.sun.istack.SAXException2:“com.kp.schema.Value”的实例正在替换“java.lang.Object”,但“com.kp.schema.Value”绑定到匿名类型 我试图使用cxf JSONProvider将Java对象封送到JSONObject,我希望JSON对象替换java.lang.Object绑定到匿名类型,java,json,jaxb,cxf,jettison,Java,Json,Jaxb,Cxf,Jettison,我收到了错误消息: com.sun.istack.SAXException2:“com.kp.schema.Value”的实例正在替换“java.lang.Object”,但“com.kp.schema.Value”绑定到匿名类型 我试图使用cxf JSONProvider将Java对象封送到JSONObject,我希望JSON对象 { "KpJSON": { "header": { "cmd_resource": "c
{
"KpJSON":
{
"header":
{
"cmd_resource": "commd",
"cmd_action": "PUT",
},
"parameters":
[
{
"name": "p1",
"syntax": "string",
"value": "text1"
},
{
"name": "p2",
"syntax": "integer",
"value": 1
},
{
"name": "input",
"syntax": "container",
"value":
[
{
"name": "ch1",
"syntax": "string",
"value": "file"
},
{
"name": "ch2",
"syntax": "boolean",
"value": false
}
]
}
]
}
}
My Parameters.java
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"name",
"syntax",
"value"
})
@XmlRootElement(name = "parameters")
public class Parameters {
@XmlElement(required = true)
protected String name;
@XmlElement(required = true)
protected SyntaxType syntax;
@XmlElement(required = true)
protected List<Value> value;
//getters and setters
}
并尝试按如下方式创建对象,但容器的输出为空
Parameters parameters3 = new Parameters();
parameters3.setName("K3");
parameters3.setSyntax(SyntaxType.CONTAINER);
Value val2 = new Value();
val2.getContent().add("sdfsdfs");
QName qname= new QName("");
JAXBElement kpsyntax = new JAXBElement(qname, SyntaxType.class, SyntaxType.CONTAINER);
kpsyntax.setValue(SyntaxType.CONTAINER);
Value val3 = new Value();
val2.getContent().add(kpsyntax);
parameters3.getValue().add(val3);
response.setHeader(header);
response.getParameters().add(parameters3);
Json输出为:
{"KpJSON":{"header":{"cmd_resource":"command","cmd_action":"PUT"},"parameters":{"name":"K3","syntax":"container","value":""}}}
我用第二种方法解决了这个问题。当@llya询问哪个
com.kp.schema.Value
JSON提供程序有类似的问题时,它会选择循环引用。因此,我修改了Value类,如下所示
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"content"
})
@XmlRootElement(name = "value")
public class Value {
@XmlElementRefs({
@XmlElementRef(name = "syntax", namespace = "http://kp.com/schema/", type = JAXBElement.class),
@XmlElementRef(name = "nodeValue", namespace = "http://kp.com/schema/", type = NodeValue.class),
@XmlElementRef(name = "name", namespace = "http://kp.com/schema/", type = JAXBElement.class)
})
@XmlMixed
@XmlAnyElement(lax = true)
protected List<Object> content;
@xmlacessortype(xmlacesstype.FIELD)
@XmlType(name=),比例={
“内容”
})
@XmlRootElement(name=“value”)
公共阶级价值{
@XmlElementRefs({
@XmlElementRef(name=“syntax”,名称空间=”http://kp.com/schema/,type=JAXBElement.class),
@XmlElementRef(name=“nodeValue”,命名空间=”http://kp.com/schema/,type=NodeValue.class),
@XmlElementRef(name=“name”,命名空间=”http://kp.com/schema/,type=JAXBElement.class)
})
@混合
@xmlanyement(lax=true)
受保护的列表内容;
并创建了NodeValue类
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"content"
})
@XmlRootElement(name = "value")
public class NodeValue {
@XmlElementRefs({
@XmlElementRef(name = "syntax", namespace = "http://kp.com/schema/", type = JAXBElement.class),
@XmlElementRef(name = "value", namespace = "http://kp.com/schema/", type = NodeValue.class),
@XmlElementRef(name = "name", namespace = "http://kp.com/schema/", type = JAXBElement.class)
})
@XmlMixed
@XmlAnyElement(lax = true)
protected List<Object> content;
@xmlacessortype(xmlacesstype.FIELD)
@XmlType(name=),比例={
“内容”
})
@XmlRootElement(name=“value”)
公共类节点值{
@XmlElementRefs({
@XmlElementRef(name=“syntax”,名称空间=”http://kp.com/schema/,type=JAXBElement.class),
@XmlElementRef(name=“value”,命名空间=”http://kp.com/schema/,type=NodeValue.class),
@XmlElementRef(name=“name”,命名空间=”http://kp.com/schema/,type=JAXBElement.class)
})
@混合
@xmlanyement(lax=true)
受保护的列表内容;
这就是我形成反应的方式
Parameters parameters3 = new Parameters();
parameters3.setName("K3");
parameters3.setSyntax(SyntaxType.CONTAINER);
Value paramvalue3 = obj.createValue();
JAXBElement<String> name = obj.createName("ch1");
JAXBElement<SyntaxType> synt = obj.createSyntax(SyntaxType.STRING);
NodeValue ch1Value = obj.createNodeValue();
ch1Value.getContent().add("KPStringChild1");
paramvalue3.getContent().add(name);
paramvalue3.getContent().add(synt);
paramvalue3.getContent().add(ch1Value);
parameters3.getValue().add(paramvalue3);
Parameters参数3=新参数();
参数3.集合名(“K3”);
参数3.setSyntax(SyntaxType.CONTAINER);
Value paramvalue3=obj.createValue();
JAXBElement name=obj.createName(“ch1”);
JAXBElement synt=obj.createSyntax(SyntaxType.STRING);
NodeValue ch1Value=obj.createNodeValue();
ch1Value.getContent().add(“KPStringChild1”);
paramvalue3.getContent().add(名称);
paramvalue3.getContent().add(synt);
paramvalue3.getContent().add(ch1Value);
parameters3.getValue().add(paramvalue3);
您有两个类值
,哪一个是com.kp.schema.Value
?
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"content"
})
@XmlRootElement(name = "value")
public class NodeValue {
@XmlElementRefs({
@XmlElementRef(name = "syntax", namespace = "http://kp.com/schema/", type = JAXBElement.class),
@XmlElementRef(name = "value", namespace = "http://kp.com/schema/", type = NodeValue.class),
@XmlElementRef(name = "name", namespace = "http://kp.com/schema/", type = JAXBElement.class)
})
@XmlMixed
@XmlAnyElement(lax = true)
protected List<Object> content;
Parameters parameters3 = new Parameters();
parameters3.setName("K3");
parameters3.setSyntax(SyntaxType.CONTAINER);
Value paramvalue3 = obj.createValue();
JAXBElement<String> name = obj.createName("ch1");
JAXBElement<SyntaxType> synt = obj.createSyntax(SyntaxType.STRING);
NodeValue ch1Value = obj.createNodeValue();
ch1Value.getContent().add("KPStringChild1");
paramvalue3.getContent().add(name);
paramvalue3.getContent().add(synt);
paramvalue3.getContent().add(ch1Value);
parameters3.getValue().add(paramvalue3);