6

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

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

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

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

问题是我需要将应用程序部署在其他服务器上,显然url的第一部分,本地ip不会相同。

该 url 由我在 WSDL 中声明:

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

我的问题是:有没有办法在 .wsdl 中以动态方式获取链接的 ip 部分?我在网上找到了一些在 Java 中执行此操作的方法,但我直接调用 .wsdl,而不是通过 java...我想是否有办法在 .wsdl 中执行此操作。

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

谢谢 :)

4

4 回答 4

4

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

<soap:address location="REPLACE_WITH_ACTUAL_URL"/>

部署后,他们将用实际 URL 替换此值!Glassfish肯定支持此功能(实际上,我认为您可以在地址位置值中放入任何您想要的内容,Glassfish 会自动替换它),根据此链接JBoss也支持此“功能”。HTH。

于 2013-02-17T11:49:09.243 回答
1

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

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

IBM HTTP Web 服务器将通过plugin-config.xml. 这会将您的网络服务公开为 http://:port/webserviceURI。这是您将用来调用独立于应用程序服务器 IP 的 Web 服务的 URL。

于 2013-02-15T03:24:29.857 回答
1

使用放置在 [servler-name]-servlet.xml 中的 sws 标记通过 XSD 动态生成 wsdl

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

    </sws:dynamic-wsdl>

这样,当托管在服务器上时,您可以将 url 设为动态

问候

安舒尔

于 2013-02-15T08:35:10.883 回答
1

这是我们可以动态更改 wsdl 位置 url 的方式

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);
    }

}
于 2017-11-22T09:14:27.703 回答