Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.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/0/xml/12.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/5/date/2.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 JibX:如何映射类并避免将其作为XML节点输出_Java_Xml_Data Binding_Binding - Fatal编程技术网

Java JibX:如何映射类并避免将其作为XML节点输出

Java JibX:如何映射类并避免将其作为XML节点输出,java,xml,data-binding,binding,Java,Xml,Data Binding,Binding,我正在使用Java对象到XML绑定工具 使用它,我希望有以下输出: <?xml version="1.0" encoding="UTF-8"?> <FEAPService> <Request> <Function>aaa</Function> <SubFunction>bbb</SubFunction> <Operation>ccc</Op

我正在使用Java对象到XML绑定工具

使用它,我希望有以下输出:

<?xml version="1.0" encoding="UTF-8"?>
<FEAPService>
    <Request>
        <Function>aaa</Function>
        <SubFunction>bbb</SubFunction>
        <Operation>ccc</Operation>
    </Request>
</FEAPService>
但我明白了:

<?xml version="1.0" encoding="UTF-8"?>
<FEAPService>
    <Request>
        <baseForm> <!-- I DO NOT WANT THIS baseForm TAG -->
            <Function>aaa</Function>
            <SubFunction>bbb</SubFunction>
            <Operation>ccc</Operation>
        </baseForm>
    </Request>
</FEAPService>
以下是JibX绑定文件:

<binding name="requestBinding_com_struts_form_SpecificForm">
    <mapping name="baseForm" class="com.struts.form.BaseForm">
        <value name="Function" field="function" />
        <value name="SubFunction" field="subFunction" />
        <value name="Operation" field="operation" />
    </mapping>    
    <mapping name="FEAPService" class="com.struts.form.SpecificForm"
        extends="com.struts.form.BaseForm">
        <structure name="Request">
            <structure map-as="com.struts.form.BaseForm" />
        </structure>
    </mapping>
</binding>

我想这可以通过实现我自己的封送拆收器来实现,但我不确定这是否是最简单的方法。

我成功地删除了不需要的XML节点,有两种方法:

简单的方法是:只需使用abstract=true属性。 核心方法:实现您自己的封送员。 第一种选择:

下面是我的binding.xml:


我设法删除了不需要的XML节点,有两种方法:

简单的方法是:只需使用abstract=true属性。 核心方法:实现您自己的封送员。 第一种选择:

下面是我的binding.xml:


基本摘要没有名称也很重要。

基本摘要没有名称也很重要

<mapping class="com.struts.form.BaseForm" abstract="true">
        <value name="Function" field="function" />
        <value name="SubFunction" field="subFunction" />
        <value name="Operation" field="operation" />
        <value name="doubleField_part1" field="doubleField" serializer="com.struts.form.BaseForm.doubleFieldDeserializer1" />
        <value name="doubleField_part2" field="doubleField" serializer="com.struts.form.BaseForm.doubleFieldDeserializer2" />
    </mapping>
public class MyMarshaller implements IMarshaller {
    private static final String FUNCTION_ELEMENT_NAME = "Function";
    private static final String SUB_FUNCTION_ELEMENT_NAME = "SubFunction";
    private static final String OPERATION_ELEMENT_NAME = "Operation";

    private String m_uri;
    private int m_index;
    private String m_name;

    public MyMarshaller() {
        m_uri = null;
        m_index = 0;

        m_name = "Function";
    }

    public MyMarshaller(String uri, int index, String name) {
        m_uri = uri;
        m_index = index;
        m_name = name;
    }

    public boolean isExtension(int index) {
        return false;
    }

    public void marshal(Object obj, IMarshallingContext ictx)
            throws JiBXException {

        // make sure the parameters are as expected
        if (!(obj instanceof BaseForm)) {
            throw new JiBXException("Invalid object type for marshaller");
        } else if (!(ictx instanceof MarshallingContext)) {
            throw new JiBXException("Invalid object type for marshaller");
        } else {
            // start by generating start tag for container
            MarshallingContext ctx = (MarshallingContext) ictx;
            BaseForm formBean = (BaseForm) obj;

            /*
             * THIS CODE COULD BE REPEATED FOR ALL FormBean CLASS' ATTRIBUTE USING REFLECTION.
             * And to control which attributes should be marshalled the attributes could follow special nomeclatures.
             * Ex.
             * class FormBean { 
             *    String marshallable_Function;
             *    String non_marshallable_Function;
             * }
             */ 
            writeTag(ctx, formBean.getFunction(), FUNCTION_ELEMENT_NAME);
            writeTag(ctx, formBean.getSubFunction(), SUB_FUNCTION_ELEMENT_NAME);
            writeTag(ctx, formBean.getOperation(), OPERATION_ELEMENT_NAME);
        }
    }

    private void writeTag(MarshallingContext ctx, String value, String entryElementName)
            throws JiBXException {
        ctx.startTag(m_index, entryElementName);
        ctx.closeStartContent();
        ctx.content(value);
        ctx.endTag(m_index, entryElementName);
    }
}
<binding name="requestBinding_com_struts_form_SpecificForm">
    <mapping class="com.struts.form.BaseForm" marshaller="example8.MyMarshaller" />        
    <mapping name="FEAPService" class="com.struts.form.SpecificForm">
        <structure name="Request">
            <structure map-as="com.struts.form.BaseForm" />
        </structure>
    </mapping>
</binding>