使用dozer将soap请求从源映射到目标

时间:2013-07-16 22:56:01

标签: java deep-copy dozer docusignapi

我正在围绕外部服务docusign创建一个包装器。 我正在尝试使用dozer将我的包装器服务对象映射到docusign对象。我正在尝试做一个深层复制。

在大多数情况下,我试图保留源名称和目标名称 - 但是推土机不会复制到第一级别以外。 在下面的示例中,我有 - 在转换后,我看到compositeTemplates节点从未从源复制到目标。可能是因为 - 它里面有一个列表?!我不知道。

我的推土机映射是:

<mapping map-null="false">
    <class-a>com.foo.wrapper.CreateEnvelopeFromTemplatesAndForms</class-a>
    <class-b>com.foo.docusign.CreateEnvelopeFromTemplatesAndForms</class-b>
</mapping>

然后我尝试在映射文件中指定字段名称 - 但我得到空指针异常。任何关于此的指示都表示赞赏。

<mapping map-null="false">
    <class-a>com.foo.wrapper.CreateEnvelopeFromTemplatesAndForms</class-a>
    <class-b>com.foo.docusign.CreateEnvelopeFromTemplatesAndForms</class-b>
    <field>
    <a>ArrayOfCompositeTemplate</a>
        <b>CompositeTemplate</b>
</field>    
     

来源:

<doc:initiateESign>
     <InitiateEsignProcessRequest>
        <doc:createEnvelopeFromTemplatesAndForms>
           <doc:envelopeInformation>
              <doc:subject></doc:subject>
           </doc:envelopeInformation>
           <doc:compositeTemplates>
              <!--Zero or more repetitions:-->
              <doc:ArrayOfCompositeTemplate>
                 <doc:inlineTemplates>
                    <!--Zero or more repetitions:-->
                    <doc:inlineTemplate>
                       <doc:envelope>
                          <doc:transactionID></doc:transactionID>
                          <doc:asynchronous></doc:asynchronous>
                          <doc:recipients>
                             <!--Zero or more repetitions:-->
                             <doc:recipient>
                                <doc:id></doc:id>
                             </doc:recipient>
                          </doc:recipients>
                       </doc:envelope>
                    </doc:inlineTemplate>
                 </doc:inlineTemplates>
                 <doc:document>
                    <doc:name></doc:name>
                 </doc:document>
              </doc:ArrayOfCompositeTemplate>
           </doc:compositeTemplates>
           <doc:activateEnvelope></doc:activateEnvelope>
        </doc:createEnvelopeFromTemplatesAndForms>
     </InitiateEsignProcessRequest>
  </doc:initiateESign>

目标:

<ns:CreateEnvelopeFromTemplatesAndForms>
     <ns:EnvelopeInformation>
        <ns:Subject></ns:Subject>
     </ns:EnvelopeInformation>
     <ns:CompositeTemplates>
        <!--Zero or more repetitions:-->
        <ns:CompositeTemplate>
           <ns:InlineTemplates>
              <!--Zero or more repetitions:-->
              <ns:InlineTemplate>
                 <ns:Envelope>
                    <ns:TransactionID></ns:TransactionID>
                    <ns:Recipients>
                       <!--Zero or more repetitions:-->
                       <ns:Recipient>
                          <ns:ID></ns:ID>
                       </ns:Recipient>
                    </ns:Recipients>
                 </ns:Envelope>
              </ns:InlineTemplate>
           </ns:InlineTemplates>
           <ns:Document>
              <ns:Name></ns:Name>
           </ns:Document>
        </ns:CompositeTemplate>
     </ns:CompositeTemplates>
     <ns:ActivateEnvelope></ns:ActivateEnvelope>
  </ns:CreateEnvelopeFromTemplatesAndForms>

任何关于如何通过推土机映射这两个的指针都会非常有用。

1 个答案:

答案 0 :(得分:0)

我非常了解DocuSign的API,但从未使用过推土机,我认为你需要得到推土机知识的人的帮助。

然而,对你所发布的内容进行了视觉扫描,我想抓住一件事。我在源代码中看到你已经将compositeTemplate元素的顺序列为

<doc:compositeTemplates>
          <!--Zero or more repetitions:-->
          <doc:ArrayOfCompositeTemplate>

但是你的推土机地图中有

<mapping map-null="false">
<class-a>com.foo.wrapper.CreateEnvelopeFromTemplatesAndForms</class-a>
<class-b>com.foo.docusign.CreateEnvelopeFromTemplatesAndForms</class-b>
<field>
<a>ArrayOfCompositeTemplate</a>
    <b>CompositeTemplate</b>

在地图中,您对CompositeTemplate与ArrayOfCompositeTemplate的顺序相反。这可能是你问题的原因吗?