首先,我使用Camel 2.15版(在Fuse 6.2.1中)创建了一些路由。
在我的过程中,我试图从使用cxf xjc maven插件生成的pojo中创建一个XML(cxf xjc从xsd的某个地方读取了一些xsd,然后生成了带有jaxb注释的pojo)。
pojos是TempProject和TempProjects。
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(
name = "",
propOrder = {"ecode", "tempName"}
)
@XmlRootElement(
name = "TempProject"
)
public class TempProject implements Serializable {
@XmlElement(
name = "Ecode",
required = true
)
protected String ecode;
@XmlElement(
name = "TempName",
required = true
)
protected String tempName;
public TempProject() {
}
public String getEcode() {
return this.ecode;
}
public void setEcode(String value) {
this.ecode = value;
}
public String getTempName() {
return this.tempName;
}
public void setTempName(String value) {
this.tempName = value;
}
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(
name = "",
propOrder = {"tempProjects"}
)
@XmlRootElement(
name = "TempProjects"
)
public class TempProjects implements Serializable {
@XmlElement(
name = "TempProject",
required = true
)
protected List<TempProject> tempProjects;
public TempProjects() {
}
public List<TempProject> getTempProjects() {
if (this.tempProjects == null) {
this.tempProjects = new ArrayList();
}
return this.tempProjects;
}
}
我可以使用以下代码生成xml:
JAXBContext jaxbContext = JAXBContext.newInstance(new Class[]{TempProjects.class});
jaxbContext.createMarshaller();
JaxbDataFormat jaxbDataFormat = new JaxbDataFormat(jaxbContext); //import org.apache.camel.converter.jaxb.JaxbDataFormat;
我打电话
.marshal(jaxbDataFormat)
在我实现从pojo到xml的编组的过程中。
生成的xml发布在下面:
<TempProjects xmlns="http://blah.blah/foo/schema/v2">
<TempProject>
<Ecode>1</Ecode>
<TempName>Tempname1</TempName>
</TempProject>
<TempProject>
<Ecode>2</Ecode>
<TempName>Tempname2</TempName>
</TempProject>
我如何生成一个包含如下名称空间的编组xml。。。
<TempProjects xmlns:myprefix="http://blah.blah/foo/schema/v2">
我之所以需要一个名称空间前缀,是因为我计划使用xpath拆分xml中的值(例如Ecode),我需要一个名称空间前缀来实现这一点(这就是我研究的,我可能错了)。
我计划的路线代码是
.marshal(jaxbDataFormat)
.split( xpath("/TempProjects/TempProject/Ecode/text()").namespaces(ns1),
new ProjectIdsAggregator()) //the above xpath doesn't work because it doesn't have a namespace prefix
//Namespaces ns1 = new Namespaces("myprefix", "http://blah.blah/foo/schema/v2" );
我查看了jaxbDataFormat。setNamespacePrefixRef(“myprefix”),但我遇到了一个错误(org.apache.camel.NoSuchBeanException:在注册表中找不到类型为java.util.Map的myprefix的bean)
实际上,我对apache camel路由世界还很陌生,所以我可能缺少一些基本的东西。
您根本不需要更改您的XML。没关系。
使用您发布的XML和您发布的命名空间声明,以下XPath可以很好地将XML(作为示例)拆分为两部分:
xpath("/myprefix:TempProjects/myprefix:TempProject").namespaces(ns1)
因为您这样声明了XML名称空间:
Namespaces ns1 = new Namespaces("myprefix", "http://blah.blah/foo/schema/v2" )
您的XPath必须为所有元素使用前缀myprefix
:
/myprefix:TempProjects/myprefix:TempProject
我正在使用 JAXB 来对我正在实现 Java 客户端的 Web 服务进行封送和解组和取消马歇尔请求和响应。然而,我被困在以下回应上,我需要解体。 为了将响应表示为Java对象,我有以下域类: 然后,我执行以下操作来解除元帅: 解编组没有发生任何事件。 对象是使用两个列表创建的。为空,有一项。但是,该项目上的和 null。我认为这与XML命名空间有关,但我无法弄清楚如何修复它。 我尝试了另一种方式
在JAXB将xml文件解组以请求对象并将其发送给servis时,我遇到了一些问题。 它返回错误而不是正确的响应-。 我正在使用下一个模式: 带有测试日期的xml文件= 以下是源xml文件: 我使用JAXB解析并转换到我的RQ对象。 它返回奇怪的错误而不是响应。 我只是将未解析的请求写入xml文件: 它有很多讨厌的ns1:nameprefix。 我想知道如何在没有冗余前缀的情况下解组?
这是我的xml,需要把它转换成Java。我使用了jaxb 并抛出以下异常javax.xml.bind.unmarshalException:意外元素(URI:“http://www.ae.com/event/load”,local:“order”)。需要的元素为<{}LM:order>
我的代码如下: 我怎样才能让它工作?如果我的xml标记有一些相关元素,如上面的“xmlns”,则JAXB解组器会抛出异常。 这是我第一次这么做,所以我对JAXB、解编等都一无所知。我在苦苦挣扎任何帮助都是好的。 编辑StackTrace:
问题内容: 我有一个XML文档,内容如下: 我的问题是如何使用Python中的BeautifulSoup这样的库访问它们? xmlDom.web [“ Web”]。总计?不起作用? 问题答案: BeautifulSoup本身不是DOM库(它不实现DOM API)。使事情变得更复杂的是,您在该xml片段中使用了名称空间。要解析该特定的XML片段,可以使用BeautifulSoup,如下所示: 如果您
我有一个XML要与JAXB解组。如果我从元素中删除所有名称空间属性,代码运行良好,但是如果我保留名称空间属性的话,在解组后会得到一个空对象。 XML是这样的: 我的动物豆是这样的: 猫豆就像: 在运行时,我得到一个空对象。我试图从属性中删除< code>"z:",得到了这个异常: 如果我从猫和动物中删除命名空间,我会得到这个例外: 下面是解组的最终代码。最后一行给出了一个空指针异常 我不确定如何处