Java 将一个新标记添加到soap xml的XSL文件

Java 将一个新标记添加到soap xml的XSL文件,java,xml,web-services,xslt,soap,Java,Xml,Web Services,Xslt,Soap,我不熟悉XSLT。 基本上,我需要通过在中间添加一行名称空间来更新传入的soap xml。你能为我推荐一个XSL吗? 还有一个问题,我应该将XSL文件放在哪里,以便对所有传入的请求执行操作 Incoming Requests: <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Header/> <soapenv:Body>

我不熟悉XSLT。 基本上,我需要通过在中间添加一行名称空间来更新传入的soap xml。你能为我推荐一个XSL吗? 还有一个问题,我应该将XSL文件放在哪里,以便对所有传入的请求执行操作

Incoming Requests:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
   <soapenv:Header/>
   <soapenv:Body>
      <consultaRegistros>
         <id>231</id>
         <numero>1231</numero>
         <registros_alta>
            ......
         </registros_alta>
      </consultaRegistros>
   </soapenv:Body>
</soapenv:Envelope>


To be transformed to:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:les="LEServico">
   <soapenv:Header/>
   <soapenv:Body>
        <les:consultaRegistrosReq>
          <consultaRegistros>
             <id>231</id>
             <numero>1231</numero>
             <registros>
                ......
             </registros>
          </consultaRegistros>
        </les:consultaRegistrosReq>
   </soapenv:Body>
</soapenv:Envelope>
传入请求:
231
1231
......
转化为:
231
1231
......
你能为我推荐一个XSL吗

不,这是一个非常独特的需求,并且没有现成的XSLT示例可以为您提供。您需要学习基本的XSLT并自己制作一个

还有一个问题,我应该将XSL文件放在哪里,以便对所有传入的请求执行操作

Incoming Requests:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
   <soapenv:Header/>
   <soapenv:Body>
      <consultaRegistros>
         <id>231</id>
         <numero>1231</numero>
         <registros_alta>
            ......
         </registros_alta>
      </consultaRegistros>
   </soapenv:Body>
</soapenv:Envelope>


To be transformed to:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:les="LEServico">
   <soapenv:Header/>
   <soapenv:Body>
        <les:consultaRegistrosReq>
          <consultaRegistros>
             <id>231</id>
             <numero>1231</numero>
             <registros>
                ......
             </registros>
          </consultaRegistros>
        </les:consultaRegistrosReq>
   </soapenv:Body>
</soapenv:Envelope>
我强烈建议完全跳过XSLT,只需修改传入的SOAPMessage对象以添加您想要添加的元素

你能为我推荐一个XSL吗

不,这是一个非常独特的需求,并且没有现成的XSLT示例可以为您提供。您需要学习基本的XSLT并自己制作一个

还有一个问题,我应该将XSL文件放在哪里,以便对所有传入的请求执行操作

Incoming Requests:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
   <soapenv:Header/>
   <soapenv:Body>
      <consultaRegistros>
         <id>231</id>
         <numero>1231</numero>
         <registros_alta>
            ......
         </registros_alta>
      </consultaRegistros>
   </soapenv:Body>
</soapenv:Envelope>


To be transformed to:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:les="LEServico">
   <soapenv:Header/>
   <soapenv:Body>
        <les:consultaRegistrosReq>
          <consultaRegistros>
             <id>231</id>
             <numero>1231</numero>
             <registros>
                ......
             </registros>
          </consultaRegistros>
        </les:consultaRegistrosReq>
   </soapenv:Body>
</soapenv:Envelope>

我强烈建议完全跳过XSLT,只需更改传入的SOAPMessage对象,以添加您要添加的元素。

您可以将其转换为:

  <consultaRegistros>
     <id>231</id>
     <numero>1231</numero>
     <registros_alta>
        ......
     </registros_alta>
  </consultaRegistros>

231
1231
......
为此:

    <les:consultaRegistrosReq xmlns:les="LEServico">
      <consultaRegistros>
         <id>231</id>
         <numero>1231</numero>
         <registros>
            ......
         </registros>
      </consultaRegistros>
    </les:consultaRegistrosReq>

231
1231
......
使用模板规则:

<xsl:template match="consultaRegostros">
  <les:consultaRegistrosReq xmlns:les="LEServico">
    <xsl:copy>
      <xsl:apply-templates/>
    </xsl:copy>
  </les:consultaRegistrosReq>
</xsl:template> 

<xsl:template match="registros_alta">
  <registros>
      <xsl:apply-templates/>
  </registros>
</xsl:template>  

加上标准标识规则,复制其他元素不变

注意,这不会像您的示例中那样将名称空间声明放在最外面的元素上,但结果是等效的


我不建议您如何设置配置以应用此转换,因为我对您的处理环境了解不够

您可以将其转换为:

  <consultaRegistros>
     <id>231</id>
     <numero>1231</numero>
     <registros_alta>
        ......
     </registros_alta>
  </consultaRegistros>

231
1231
......
为此:

    <les:consultaRegistrosReq xmlns:les="LEServico">
      <consultaRegistros>
         <id>231</id>
         <numero>1231</numero>
         <registros>
            ......
         </registros>
      </consultaRegistros>
    </les:consultaRegistrosReq>

231
1231
......
使用模板规则:

<xsl:template match="consultaRegostros">
  <les:consultaRegistrosReq xmlns:les="LEServico">
    <xsl:copy>
      <xsl:apply-templates/>
    </xsl:copy>
  </les:consultaRegistrosReq>
</xsl:template> 

<xsl:template match="registros_alta">
  <registros>
      <xsl:apply-templates/>
  </registros>
</xsl:template>  

加上标准标识规则,复制其他元素不变

注意,这不会像您的示例中那样将名称空间声明放在最外面的元素上,但结果是等效的


我不建议您如何设置配置以应用此转换,因为我对您的处理环境了解不够

谢谢你提供的细节。我的应用程序是一个用java构建并部署在weblogic上的简单webservice应用程序。我的问题是,我应该将这个XSLT文件添加到java应用程序中的某个位置,还是应该保留在我的应用程序运行的服务器上?将其作为服务器上的文件进行维护,并从java应用程序调用转换。组织它,使您只编译一次样式表,而不是每次使用。感谢您提供的详细信息。我的应用程序是一个用java构建并部署在weblogic上的简单webservice应用程序。我的问题是,我应该将这个XSLT文件添加到java应用程序中的某个位置,还是应该保留在我的应用程序运行的服务器上?将其作为服务器上的文件进行维护,并从java应用程序调用转换。对其进行组织,以便只编译一次样式表,而不是每次使用。