Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用ApacheCamel XmlJsonDataFormat编组将XML字符串转换为JSON字符串_Java_Json_Xml_Apache Camel_Marshalling - Fatal编程技术网

Java 如何使用ApacheCamel XmlJsonDataFormat编组将XML字符串转换为JSON字符串

Java 如何使用ApacheCamel XmlJsonDataFormat编组将XML字符串转换为JSON字符串,java,json,xml,apache-camel,marshalling,Java,Json,Xml,Apache Camel,Marshalling,我正在尝试将下面程序中的XML字符串转换为JSON字符串 我可以从文件中转换它,但不能从字符串中转换 你知道吗 package com.tda.topology; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.nio.charset.StandardCharsets; import org.apache.camel.Exchange; import org.apache.came

我正在尝试将下面程序中的XML字符串转换为JSON字符串

我可以从文件中转换它,但不能从字符串中转换

你知道吗

package com.tda.topology;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;

import org.apache.camel.Exchange;   
import org.apache.camel.dataformat.xmljson.XmlJsonDataFormat;

public class Demo2 {

public static void main(String[] args) throws Exception {
    String xmlstring = "<soapenv:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ser=\"http://services.web.post.list.com\"><soapenv:Header><authInfo xsi:type=\"soap:authentication\" xmlns:soap=\"http://list.com/services/SoapRequestProcessor\"><!--You may enter the following 2 items in any order--><username xsi:type=\"xsd:string\">user@email.com</username><password xsi:type=\"xsd:string\">password</password></authInfo></soapenv:Header></soapenv:Envelope>";
    XmlJsonDataFormat xmlJsonDataFormat = new XmlJsonDataFormat();
    xmlJsonDataFormat.setEncoding("UTF-8");
    xmlJsonDataFormat.setForceTopLevelObject(true);
    xmlJsonDataFormat.setTrimSpaces(true);
    xmlJsonDataFormat.setRootName("newRoot");
    xmlJsonDataFormat.setSkipNamespaces(true);
    xmlJsonDataFormat.setRemoveNamespacePrefixes(true);

    Exchange exchange;
    //exchange.setIn(in);

    InputStream stream = new ByteArrayInputStream(xmlstring.getBytes(StandardCharsets.UTF_8));
    //xmlJsonDataFormat.getSerializer().readFromStream(stream).toString();
    //xmlJsonDataFormat.marshal(exchange, graph, stream);

}
} 
package com.tda.topology;
导入java.io.ByteArrayInputStream;
导入java.io.InputStream;
导入java.nio.charset.StandardCharset;
导入org.apache.camel.Exchange;
导入org.apache.camel.dataformat.xmljson.XmlJsonDataFormat;
公开课演示2{
公共静态void main(字符串[]args)引发异常{
字符串xmlstring=”user@email.compassword";
XmlJsonDataFormat XmlJsonDataFormat=新的XmlJsonDataFormat();
setEncoding(“UTF-8”);
setForceTopLevelObject(true);
setTrimSpaces(true);
setRootName(“newRoot”);
xmlJsonDataFormat.setskipnamespace(true);
setRemoveNamespacePrefixes(true);
交换;
//交换设置(in);
InputStream=newbytearrayinputstream(xmlstring.getBytes(StandardCharsets.UTF_8));
//xmlJsonDataFormat.getSerializer().readFromStream(stream.toString();
//xmlJsonDataFormat.marshal(交换、图形、流);
}
} 

您需要在xmlJsonDataFormat对象上调用start,并将xom jar添加到类路径中(如果还没有)。这就是我的工作原理:

xmlJsonDataFormat.start();
String json = xmlJsonDataFormat.getSerializer().readFromStream(stream).toString();
我可以通过查找来源来解决这个问题。getSerialiser返回null,因此我在xmlJsonDataFormat中搜索序列化程序初始化的位置,它是通过在超类的start方法中调用的doStart方法完成的


免责声明:不确定您是否应该像这样使用XmlJsonDataFormat,它通常用于驼峰路由:
from(“direct:marshal”).marshal(xmlJsonFormat).to(“mock:json”)但我不知道您的具体用例。

您需要在xmlJsonDataFormat对象上调用start,并将xom jar添加到类路径中(如果还没有)。这就是我的工作原理:

xmlJsonDataFormat.start();
String json = xmlJsonDataFormat.getSerializer().readFromStream(stream).toString();
我可以通过查找来源来解决这个问题。getSerialiser返回null,因此我在xmlJsonDataFormat中搜索序列化程序初始化的位置,它是通过在超类的start方法中调用的doStart方法完成的


免责声明:不确定您是否应该像这样使用XmlJsonDataFormat,它通常用于驼峰路由:
from(“direct:marshal”).marshal(xmlJsonFormat).to(“mock:json”)但我不知道您的具体用例。

谢谢,这太好了,它对我很有用。我正在尝试将带有名称空格的复杂嵌套XML消息转换为Json。内部实时软件,如风暴。谢谢这是伟大的它为我工作。我正在尝试将带有名称空格的复杂嵌套XML消息转换为Json。内置实时软件,如STORM。