Web服务,WSDL地址中的动态地址

时间:2013-02-14 15:45:58

标签: java web-services wsdl

我对网络服务很陌生,很抱歉如果我写了很多错误的东西......

我创建了一些java类并生成了wsdl,所以我有一个自下而上的Web服务。 我部署了所有内容(在EAR中)并调用了

  http://localhost:7159/chc2/services/WebServiceManager

调用Web服务。它有效,我得到了结果。

问题是我需要在其他服务器上部署应用程序,显然网址的第一部分,本地IP不一样。

我在WSDL中声明了这个url:

<wsdlsoap:address location="http://localhost:7159/chc2/services/WebServiceManager"/>

我的问题是:有一种方法可以在.wsdl中以动态方式获取链接的ip部分吗? 我在网上找到了一些用Java做的方法,但我直接调用.wsdl,而不是通过java ...我想如果有办法在.wsdl中做到这一点

我拥有的其他配置文件是server-config.wsdd和web.xml。

谢谢:)

4 个答案:

答案 0 :(得分:4)

某些应用程序服务器允许您提交包含虚拟地址位置的WSDL的Web服务:

<soap:address location="REPLACE_WITH_ACTUAL_URL"/>

部署后,他们会将此值替换为实际的URL! Glassfish肯定支持此功能(实际上,我认为您可以在地址位置值中放置任何内容,Glassfish会自动替换它),并且根据this linkJBoss也支持此功能'。 HTH。

答案 1 :(得分:1)

据我了解,您的问题是:当您在其他服务器上部署Web服务时,您会如何调用Web服务?

您的服务器显然是节点/群集的一部分。在Java EE应用程序服务器上,例如在WebSphere上,您可以在plugin-config.xml配置传入/传出的http端口。

IBM HTTP Web Server将通过plugin-config.xml与您的应用程序服务器配置。这会将您的webserice公开为http://:port / webserviceURI。这是用于调用Web服务的URL,与应用程序服务器的IP无关。

答案 2 :(得分:1)

使用位于[servler-name] -servlet.xml中的sws标记动态生成wsdl XSD

<sws:dynamic-wsdl
        id="getemployeeDetails"
        portTypeName="EmpService"
        locationUri="/empService"
        targetNamespace="http://www.example.org/">
        <sws:xsd location="/WEB-INF/employee.xsd"/>

    </sws:dynamic-wsdl>

通过这种方式,您可以在托管服务器

时将网址设置为动态

此致

Anshul

答案 3 :(得分:1)

这是我们动态更改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);
    }

}