Bonjour,
J'ai un fichier xml dont voici la source:
Code XML :
<?xml version="1.0" encoding="UTF-8"?>
<process
name="FunctionProcess"
targetNamespace="http://FunctionProcess.bpel"
xmlns="http://docs.oasis-open.org/wsbpel/2.0/process/executable"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sxt="http://www.sun.com/wsbpel/2.0/process/executable/SUNExtension/Trace"
xmlns:sxed="http://www.sun.com/wsbpel/2.0/process/executable/SUNExtension/Editor"
xmlns:tns="http://FunctionProcess.bpel" xmlns:ns0="http://AdderService.wsdl" xmlns:ns1="http://MultiplierService.wsdl" xmlns:ns2="http://SquareService.wsdl" xmlns:ns3="http://www.example.org/messages" xmlns:ns4="http://ws.apache.org/axis2" xmlns:bpel="http://docs.oasis-open.org/wsbpel/2.0/process/executable">
<import namespace="http://FunctionProcessService.wsdl" location="FunctionProcessService.wsdl" importType="http://schemas.xmlsoap.org/wsdl/"/>
<import namespace="http://AdderService.wsdl" location="AdderService.wsdl" importType="http://schemas.xmlsoap.org/wsdl/"/>
<import namespace="http://MultiplierService.wsdl" location="MultiplierService.wsdl" importType="http://schemas.xmlsoap.org/wsdl/"/>
<import namespace="http://SquareService.wsdl" location="SquareService.wsdl" importType="http://schemas.xmlsoap.org/wsdl/"/>
<partnerLinks>
<partnerLink name="SquarePartnerLink" xmlns:ns2="http://SquareService.wsdl" partnerLinkType="ns2:SquareServicePartnerlinkType" partnerRole="squareRole"/>
<partnerLink name="MultiplierPartnerLink" xmlns:ns1="http://MultiplierService.wsdl" partnerLinkType="ns1:MultiplierServicePartnerlinkType" partnerRole="multiplierRole"/>
<partnerLink name="AdderPartnerLink" xmlns:ns0="http://AdderService.wsdl" partnerLinkType="ns0:AdderServicePartnerlinkType" partnerRole="adderRole"/>
<partnerLink name="FunctionProcessPartnerLink" xmlns:tns="http://FunctionProcessService.wsdl" partnerLinkType="tns:FunctionProcessService" myRole="FunctionProcessServicePortTypeRole"/>
</partnerLinks>
<variables>
<variable name="FunctionProcessServiceOperationOutput" xmlns:tns="http://FunctionProcessService.wsdl" messageType="tns:FunctionProcessServiceOperationResponse"/>
<variable name="MultiplyOutput1" messageType="ns1:multiplyResponse"/>
<variable name="MultiplyInput1" messageType="ns1:multiplyRequest"/>
<variable name="FunctionProcessServiceOperationInput" xmlns:tns="http://FunctionProcessService.wsdl" messageType="tns:FunctionProcessServiceOperationRequest"/>
<variable name="MultiplyOutput" xmlns:ns1="http://MultiplierService.wsdl" messageType="ns1:multiplyResponse"/>
<variable name="MultiplyInput" xmlns:ns1="http://MultiplierService.wsdl" messageType="ns1:multiplyRequest"/>
<variable name="SquareOutput" xmlns:ns2="http://SquareService.wsdl" messageType="ns2:squareResponse"/>
<variable name="SquareInput" xmlns:ns2="http://SquareService.wsdl" messageType="ns2:squareRequest"/>
<variable name="AddOutput" xmlns:ns0="http://AdderService.wsdl" messageType="ns0:addResponse"/>
<variable name="AddInput" xmlns:ns0="http://AdderService.wsdl" messageType="ns0:addRequest"/>
</variables>
</process>
J'essaie de modifier l'attribut "
xmlns:ns0" de cet élément <partnerLink name="AdderPartnerLink" xmlns:ns0="
http://AdderService.wsdl" partnerLinkType="ns0:AdderServicePartnerlinkType" partnerRole="adderRole"/>
en replaçant la valeur en rouge par AdderService1.wsdl
Voici le code java:
Code Java :
import java.io.*;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.xml.parsers.*;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.*;
public class UpdateBPEL {
static Document document;
static org.jdom.Element racine;
static void lireFichier(String fichier) throws Exception
{
File file = new File(fichier);
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
document = db.parse(file);
// System.out.println("Root element : " +document.getDocumentElement().getNodeName());
}
static void updateElement(String element,String element1)
{
String ch1,ch2,ch3 ="";
ch1="http://"+ element;
ch2="http://"+ element1;
long l;
NodeList nodeLst = document.getElementsByTagName("partnerLink");
for (int s = 0; s < nodeLst.getLength(); s++) { //import
Node fstNode = nodeLst.item(s);
if (fstNode.getNodeType() == Node.ELEMENT_NODE) {
Element fstElmnt = (Element) fstNode;
//System.out.println(" element : " +fstElmnt.getAttributes().getLength());
l = fstElmnt.getAttributes().getLength();
// System.out.println("lol "+l);
for (int h = 0; h <l; h++) { //import
Node fNode= fstElmnt.getAttributes().item(h);
if (fNode.getNodeType() == Node.ATTRIBUTE_NODE) {
Attr fElmnt = (Attr) fNode;
ch3 = fElmnt.getValue();
if (ch3.equals(ch1)){
// System.out.println("Result est "+ch3+"fElmnt.getName()=>"+fElmnt.getName()+"ch2 "+ch2);
fstElmnt.setAttribute(fElmnt.getName(), ch2);
}
}
}
}
}
}
public static void writeXmlFile(Document doc, String filename) {
try {
// Prepare the DOM document for writing
Source source = new DOMSource(doc);
// Prepare the output file
File file = new File(filename);
Result result = new StreamResult(file);
// Write the DOM document to the file
Transformer xformer = TransformerFactory.newInstance().newTransformer();
xformer.transform(source, result);
} catch (TransformerConfigurationException e) {
} catch (TransformerException e) {
}
}
public static void main(String[] args) {
try
{
lireFichier("E:\\Workspace\\FunctionProcesstest.bpel");
updateElement("AdderService.wsdl","AdderService1.wsdl");
writeXmlFile(document,"E:\\Workspace\\FunctionProcesstest2.bpel");
}
catch (Exception e) {
e.printStackTrace();
}
}
}
Résultat dans le fichier FunctionProcesstest2: est
Code XML :
<partnerLinks>
<partnerLink name="SquarePartnerLink" partnerLinkType="ns2:SquareServicePartnerlinkType" partnerRole="squareRole"/>
<partnerLink name="MultiplierPartnerLink" partnerLinkType="ns1:MultiplierServicePartnerlinkType" partnerRole="multiplierRole"/>
[b]<partnerLink xmlns:ns0="http://AdderService1.wsdl" name="AdderPartnerLink" partnerLinkType="ns0:AdderServicePartnerlinkType" partnerRole="adderRole"/>[/b]
<partnerLink xmlns:tns="http://FunctionProcessService.wsdl" myRole="FunctionProcessServicePortTypeRole" name="FunctionProcessPartnerLink" partnerLinkType="tns:FunctionProcessService"/>
</partnerLinks>
Nous voyant que les éléments au dessus de l'élément en gras[b] leur attributs xmlns:* sont supprimés, je ne sais ceci est du a quoi exactement sachant si je prends a fichier xml source moins volumineux contenant que les partnerlink mon programme marche
J'espère que j'ai expliqué mon problème.
Merci d'avance pour votre aide