我有一个几年前在C++中创建的Web服务,并由.NET客户端使用C#的"wsdl.exe"来生成客户端存根.出于各种原因,我现在还需要Java客户端,并且愿意使用JAX-WS限制Java 6(JDK 1.6)的使用.生成的存根工作正常,即使打包在.jar中,但我遇到了JAX-WS Web服务客户端要部署的方式的问题.看起来我遇到的问题是可以解决的,但建议的方法似乎都不起作用.
JAX-WS期望WSDL可以访问,最好是从网络访问,因为它每次启动时都会解析WSDL以创建绑定.与使用已知但无法访问的wsdl创建Web服务客户端中的 jgrowl一样,客户端可能无法访问JAX-WS使用的URL(可能是构建计算机上的文件或指向localhost的指针)的WSDL. .我想在客户端.jar中发布WSDL,但最简单的解决方案(-wsdllocation "/path/to/wsdl/in/jar.wsdl")打印出一个我不想显示的警告.
我也宁愿不具有客户做这样的事情找到了解决办法jgrowl,这似乎工作,但不只是工作.在Google上找到的文章主要针对服务器WSDL位置,但建议客户端应该能够META-INF/jax-ws-catalog.xml使用将用于转换-wsdllocation为.jar文件中的路径的URL 的文件,但这些文件在我们的测试中似乎不起作用.
是否有一个"配方",以便我可以将WSDL放在.jar的某个地方并且让JAX-WS客户端只需要在客户端用户方面不需要额外的工作而且没有警告?
我有一个问题,我必须比我想要更早地实例化对象的实例,因为我需要通过一些深层所有权连接信号槽,我想提出一种存储和转发方式插槽,以便我可以构建更接近其使用站点的对象,而不是作为成员变量.
我的基本问题是我有一个进程,它将在一个单独的线程上下载更新文件,并向任何感兴趣的人发送进度信号.信号基本上是:
typedef boost::signals2::signal<void (double)> DownloadProgress;
Run Code Online (Sandbox Code Playgroud)
假设progress下面提到的功能的实现符合这一点; 信号本身的性质并不是很重要(尽管我大部分时间都在使用仿函数).
信号已设置,代码调用如下:
Updater updater;
updater.onDownloadProgress(&progress);
updater.runDownloadTask();
Run Code Online (Sandbox Code Playgroud)
当你打电话时updater.runDownloadTask(),它会启动
UpdaterDownloadTask,启动HTTPRequest并返回一个
HTTPResponse.的HTTPResponse是,其与网络层相互作用并接收数据,并包含所述片DownloadProgress
的信号.有了这个,我的实现看起来有点像(自下而上
HTTPResponse,大大缩写为elide方法,不是特别说明):
class HTTPResponse
{
public:
// this will be called for every "chunk" the underlying HTTP
// library receives
void processData(const char* data, size_t size)
{
// process the data and then send the progress signal
// assume that currentSize_ and totalSize_ are properly set
progressSignal_(currentSize_ * 100.0 / totalSize_);
} …Run Code Online (Sandbox Code Playgroud)