簡體   English   中英

如何在WSDL中動態設置SOAP地址的位置?

[英]How to dynamically set the location of a SOAP address in a WSDL?

我有一個用於生成Java代碼的WSDL文件。 WSDL文件具有以下用於SOAP地址的代碼

<wsdl:service name="SomeService">
        <wsdl:port binding="tns:HttpBinding_SomeService" name="HttpBinding_SomeService">
            <soap:address location="https://www.someservice.com/testenv/SomeService?client_id=XXXX-XXXXX-XXXX&amp;client_secret=XXXXXXXXXX"/>
        </wsdl:port>
</wsdl:service>

我希望<soap:address>位置動態更改。 有沒有辦法可以使用Java做到這一點?

有一種使用DocumentBuilder做到這一點的方法,我只是給了語法行以導入和try-catch修飾它們

String filepath = "fakepath\\wsdl.xml"; //Give your wsdl file path
        DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
        Document doc = docBuilder.parse(filepath);

    Node address= doc.getElementsByTagName("soap:address").item(0);

    NamedNodeMap attr = address.getAttributes();
    Node nodeAttr = attr.getNamedItem("location");
    nodeAttr.setTextContent("Your new location here");

        // write the content into xml file
        TransformerFactory transformerFactory = TransformerFactory.newInstance();
        Transformer transformer = transformerFactory.newTransformer();
        DOMSource source = new DOMSource(doc);
        StreamResult result = new StreamResult(new File(filepath));
        transformer.transform(source, result);

您可以將其寫入函數並通過將位置作為參數傳遞來調用它。 並動態更改wsdl文件。

這是導入的完整示例

import java.io.File;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
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.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.xml.sax.SAXException;

public class WsdlDynamicPath {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        try {
            changePath();
        } catch (ParserConfigurationException | SAXException | IOException | 
 TransformerException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public static void changePath() throws ParserConfigurationException, SAXException, IOException, TransformerException{
        String filepath = "path to wsdl\\demo.wsdl"; //Give your wsdl file path
        DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
        Document doc = docBuilder.parse(filepath);

        Node address= doc.getElementsByTagName("soap:address").item(0);

        NamedNodeMap attr = address.getAttributes();
        Node nodeAttr = attr.getNamedItem("location");
        nodeAttr.setTextContent("new path to wsdl");

        // write the content into xml file
        TransformerFactory transformerFactory = TransformerFactory.newInstance();
        Transformer transformer = transformerFactory.newTransformer();
        DOMSource source = new DOMSource(doc);
        StreamResult result = new StreamResult(new File(filepath));
        transformer.transform(source, result);
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM