我对网络服务很陌生,很抱歉如果我写了很多错误的东西......
我创建了一些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。
谢谢:)
答案 0 :(得分:4)
某些应用程序服务器允许您提交包含虚拟地址位置的WSDL的Web服务:
<soap:address location="REPLACE_WITH_ACTUAL_URL"/>
部署后,他们会将此值替换为实际的URL! Glassfish肯定支持此功能(实际上,我认为您可以在地址位置值中放置任何内容,Glassfish会自动替换它),并且根据this link,JBoss也支持此功能'。 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);
}
}