Java 当我移动Web服务时,所有硬编码URI会发生什么情况?

Java 当我移动Web服务时,所有硬编码URI会发生什么情况?,java,web-services,wsdl,migration,jax-ws,Java,Web Services,Wsdl,Migration,Jax Ws,我正在用JAX-WS开发一个测试WS,演示效果很好,但是如果我尝试在生产环境中移动它,我的代码中会出现很多测试环境的URL。例如: com.mycompany.testserver.ws.writer.WriterInterface service = new com.mycompany.testserver.ws.writer.WriterInterface(); QName portQName = new QName("http://testserver.mycompany.com/ws/

我正在用JAX-WS开发一个测试WS,演示效果很好,但是如果我尝试在生产环境中移动它,我的代码中会出现很多测试环境的URL。例如:

com.mycompany.testserver.ws.writer.WriterInterface service = new com.mycompany.testserver.ws.writer.WriterInterface();

QName portQName = new QName("http://testserver.mycompany.com/ws/writer.php", "WriterInterfacePort");

String req = "SOME_XML_HERE";

try { // Call Web Service Operation

    Dispatch<Source> sourceDispatch = null;
    sourceDispatch = service.createDispatch(portQName, Source.class, Service.Mode.PAYLOAD);
    Source result = sourceDispatch.invoke(new StreamSource(new StringReader(req)));
} catch (Exception ex) [
//do stuff here
}
com.mycompany.testserver.ws.writer.WriterInterface服务=新建com.mycompany.testserver.ws.writer.WriterInterface();
QName端口QName=新的QName(“http://testserver.mycompany.com/ws/writer.php“,“WriterInterfacePort”);
String req=“这里有一些XML”;
请尝试{//调用Web服务操作
Dispatch sourceDispatch=null;
sourceDispatch=service.createDispatch(portQName、Source.class、service.Mode.PAYLOAD);
Source result=sourceDispatch.invoke(新StreamSource(新StringReader(req));
}捕获(例外情况除外)[
//在这里做事
}

移动此类应用程序的最佳做法是什么?

从配置文件中读取连接URL。您可能还希望有一个强类型配置对象来缓存该值,以便只需读取一次。然后,当您将应用程序从测试移动到生产时,只需更新配置文件。

最常见的做法是将URL存储在配置文件中,而不是硬编码,并且有单独的测试和生产配置


引入integration broker或service registry可能有些过火。

您确实应该避免将URL硬编码为代码。有多种方法可以避免这种情况。即使您没有可用的配置文件功能,您至少应该将这些数据以字符串形式存储在其声明的每个类的顶部

不需要告诉你(但我想我是)你现在遇到了为什么你从不硬编码URL/配置数据的原因