Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.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
JavaSpring批处理应用程序上下文中的XStream双下划线处理_Java_Spring_Spring Batch_Xstream_Double Underscore - Fatal编程技术网

JavaSpring批处理应用程序上下文中的XStream双下划线处理

JavaSpring批处理应用程序上下文中的XStream双下划线处理,java,spring,spring-batch,xstream,double-underscore,Java,Spring,Spring Batch,Xstream,Double Underscore,​我正在使用XStream for oxm(Java对象到xml)。NameCoder使用下划线作为默认转义字符(更多信息见下文),由于我将ext_数据作为xml标记,因此它将被写入ext_数据 XStream将Java类名和字段名映射到XML标记或属性。不幸的是,这种映射不能是1:1,因为Java中用于标识符的某些字符在XML名称中无效。因此,XStream使用XmlFriendlyNameCoder将这些字符替换为替换字符。默认情况下,此名称编码程序使用下划线作为转义字符,因此也必须转义下划

​我正在使用XStream for oxm(Java对象到xml)。NameCoder使用下划线作为默认转义字符(更多信息见下文),由于我将ext_数据作为xml标记,因此它将被写入ext_数据

XStream将Java类名和字段名映射到XML标记或属性。不幸的是,这种映射不能是1:1,因为Java中用于标识符的某些字符在XML名称中无效。因此,XStream使用XmlFriendlyNameCoder将这些字符替换为替换字符。默认情况下,此名称编码程序使用下划线作为转义字符,因此也必须转义下划线本身。您可以提供不同配置的XmlFriendlyNameCoder实例,或者提供完全不同的实现,如NoNameCoder,以完全防止名称编码。但是,您有责任确保生成的名称对XML有效。()

我试图提供一个不同配置的XMLFriendlyNameCoder实例(使用HierarchycalStreamDriver的各种实现)以及一个完全不同的NoNameCoder实现。虽然应用程序运行成功,但结果保持不变。我正在使用XStream 1.4.8

有很多关于如何使用建议的解决方法的例子(这里有几个),所以我很有信心我的各种尝试都设置正确(但我可能忽略了一些东西)。以下是我最近的配置:

<beans:bean id="myMarshaller" class="org.springframework.oxm.xstream.XStreamMarshaller">
    <beans:property name="streamDriver">
        <beans:bean class="com.thoughtworks.xstream.io.xml.Xpp3Driver">
            <beans:constructor-arg>
                <beans:bean class="com.thoughtworks.xstream.io.xml.XmlFriendlyNameCoder">   
                    <beans:constructor-arg index="0" value="DDD"/>
                    <beans:constructor-arg index="1" value="_"/>
                </beans:bean>
            </beans:constructor-arg>
        </beans:bean>
    </beans:property>                       
    <beans:property name="fieldAliases">
    <util:map id="aliases">
            <beans:entry key="com.billup.beans.Data.extData" value="ext_data"/>
        </util:map>
    </beans:property>
</beans:bean>
<beans:bean id="myMarshaller" class="org.springframework.oxm.xstream.XStreamMarshaller">
    <beans:property name="streamDriver">
        <beans:bean class="com.thoughtworks.xstream.io.xml.DomDriver">
            <beans:constructor-arg value="UTF-8"/>
            <beans:constructor-arg>
                <beans:bean class="com.thoughtworks.xstream.io.naming.NoNameCoder"/>
            </beans:constructor-arg>
        </beans:bean>
    </beans:property>       
    <beans:property name="fieldAliases">
    <util:map id="aliases">
            <beans:entry key="com.billup.beans.Data.extData" value="ext_data"/>
        </util:map>
    </beans:property>
</beans:bean>
我意识到这个问题看起来很独特,范围也很窄,但回答可能会揭示一个更大的问题,即如何在应用程序上下文中正确配置streamDriver(在Spring批处理应用程序中)

注意-我使用的是Spring4和Java8

谢谢

编辑: 我还尝试使用以下配置:

<beans:bean id="myMarshaller" class="org.springframework.oxm.xstream.XStreamMarshaller">
    <beans:property name="streamDriver">
        <beans:bean class="com.thoughtworks.xstream.io.xml.Xpp3Driver">
            <beans:constructor-arg>
                <beans:bean class="com.thoughtworks.xstream.io.xml.XmlFriendlyNameCoder">   
                    <beans:constructor-arg index="0" value="DDD"/>
                    <beans:constructor-arg index="1" value="_"/>
                </beans:bean>
            </beans:constructor-arg>
        </beans:bean>
    </beans:property>                       
    <beans:property name="fieldAliases">
    <util:map id="aliases">
            <beans:entry key="com.billup.beans.Data.extData" value="ext_data"/>
        </util:map>
    </beans:property>
</beans:bean>
<beans:bean id="myMarshaller" class="org.springframework.oxm.xstream.XStreamMarshaller">
    <beans:property name="streamDriver">
        <beans:bean class="com.thoughtworks.xstream.io.xml.DomDriver">
            <beans:constructor-arg value="UTF-8"/>
            <beans:constructor-arg>
                <beans:bean class="com.thoughtworks.xstream.io.naming.NoNameCoder"/>
            </beans:constructor-arg>
        </beans:bean>
    </beans:property>       
    <beans:property name="fieldAliases">
    <util:map id="aliases">
            <beans:entry key="com.billup.beans.Data.extData" value="ext_data"/>
        </util:map>
    </beans:property>
</beans:bean>

很明显,我做得不对。以下各项似乎正在发挥作用:

<beans:bean id="myMarshaller" class="org.springframework.oxm.xstream.XStreamMarshaller">
    <beans:property name="nameCoder">
        <beans:bean class="com.thoughtworks.xstream.io.xml.XmlFriendlyNameCoder">   
            <beans:constructor-arg index="0" value="_-"/>
            <beans:constructor-arg index="1" value="_"/>
        </beans:bean>
    </beans:property>
    <beans:property name="fieldAliases">
        <util:map id="aliases">
            <beans:entry key="com.billup.beans.Data.extData" value="ext_data"/>
        </util:map>
    </beans:property>
</beans:bean>