Проблема с заменой нескольких строк в XML во время сборки Maven - PullRequest
0 голосов
/ 03 июля 2018

Мне нужно заменить несколько строк в файле .wsdd в war, сгенерированном после моей maven сборки.

Я использую antrun-maven-plugin и ant's replace task для этой цели.

Ниже приведен фрагмент из pom.xml:

<plugin>
   <groupId>com.github.odavid.maven.plugins</groupId>
   <artifactId>antrun-maven-plugin</artifactId>
   <executions>
    <execution>
     <phase>package</phase>
      <configuration>
       <target>
        <ant antfile="replace.xml">
         <target name="replace-config"/>    
        </ant>
       </target>
      </configuration>
     <goals>
      <goal>run</goal>
     </goals>
    </execution>
   </executions></plugin>

Здесь replace.xml содержит цель ant для фактической замены многострочного токена и обновления окончательного war замененным файлом .wsdd, ниже приведена часть, где мы заменяем многострочный токен в файле .wsdd.

<target name ="replace-config">
<echo>********** Replacing tokens in server-config.wsdd file *************</echo>
<replace dir="${basedir}/target/as_gen/WEB-INF/" >
    <include name="server-config.wsdd"/>
    <replacetoken><![CDATA[<requestFlow>      
                             <handler type="java:org.apache.axis.handlers.JWSHandler">        
                                 <parameter name="scope" value="session"/>      
                             </handler>      
                             <handler type="java:org.apache.axis.handlers.JWSHandler">        
                                <parameter name="scope" value="request"/>        
                                <parameter name="extension" value=".jwr"/>      
                             </handler>    
                    </requestFlow>]]></replacetoken>
    <replacevalue><![CDATA[<requestFlow>      
                               <handler type="java:com.as.webservices.TS9TicketTokenSender">        
                                 <parameter name="scope" value="session"/>      
                               </handler>      
                                <handler name="_wss4j_as_receiver_handler" type="java:com.as.security.asWSSReceiverHandler">        
                                    <parameter name="action" value="NoSecurity"/>      
                                </handler>    
                                <handler type="java:com.cm.ChangeHandler"/>
                                <handler type="java:com.cm.WSLoggingHandler"/>
                         </requestFlow>
                         <responseFlow>      
                         <handler type="java:com.as.webservices.TS9TicketTokenSender"/>      
                         <handler name="_wss4j_as_sender_handler" type="java:com.as.security.asWSSSenderHandler">        
                            <parameter name="signatureKeyIdentifier" value="IssuerSerial"/>        
                         <parameter name="encryptionKeyIdentifier" value="IssuerSerial"/>        
                         <parameter name="action" value="NoSecurity"/>      
                         </handler>    
                         <handler type="java:com.cm.WSLoggingHandler"/>
                        </responseFlow>  
   ]]></replacevalue>
</replace>             

Теперь это дает правильные результаты при запуске на Unix-машине, и токен успешно заменяется заменой значения, но каким-то образом замена не происходит на моей машине с Windows.

Пожалуйста, помогите с идентификацией проблемы и альтернативный способ сделать это . Спасибо.

1 Ответ

0 голосов
/ 06 июля 2018

Я смог сделать это, используя задачу муравья replaceregexp. определил первое содержимое между <requestFlow>....</requestFlow> в match атрибуте и добавил замененное значение в replace атрибута replaceregexp task

...