C++调用java CXF服务端

2014-11-24 03:19:33 · 作者: · 浏览: 0

下面是根据网络得来资料以及自己修改后代码,绝对能用

#include "stdafx.h"

#include

#import "msxml4.dll"

using namespace MSXML2;

#import "C:\Program Files\Common Files\MSSoap\Binaries\mssoap1.dll" \

exclude("IStream", "IErrorInfo", "ISequentialStream", "_LARGE_INTEGER", \

"_ULARGE_INTEGER", "tagSTATSTG", "_FILETIME")

using namespace MSSOAPLib;

void Add()

{

ISoapSerializerPtr Serializer;

ISoapReaderPtr Reader;

ISoapConnectorPtr Connector;

// 链接到服务端.

Connector.CreateInstance(__uuidof(HttpConnector));

Connector->Property["EndPointURL"] = "http://192.168.3.24:8080/WS_DEMO/log";

Connector->Connect();

// 开始消息

//在与服务器连接后,我们需要指定Web服务完成的操作。

//为了指定该操作,我们需要再次使用SoapConnector的Property属性

Connector->Property["SoapAction"] = " http://192.168.3.24:8080/WS_DEMO/log";

Connector->BeginMessage();

// 生成SoapSerializer对象.

Serializer.CreateInstance(__uuidof(SoapSerializer));

// 序列化对象连接到输入流的连接对象.

Serializer->Init(_variant_t((IUnknown*)Connector->InputStream));

// 创建SOAP消息

Serializer->startEnvelope("","","");

Serializer->startBody("");

// 开始SOAP消息中的一个元素,第一个参数描述了名字空间,是wsdl文件中的://targetNamespace="http://interfaces.webservice.asc.com/"

// 如果它是空值,就会缺省地使用SOAP-ENV。第二、第三个参数

//调用uploadLog方法,参数名由wsdl文件决定:

Serializer->startElement("uploadLog","http://interfaces.webservice.asc.com/","STANDARD","");

Serializer->startElement("arg0","","STANDARD","");

Serializer->writeString("the input arg right!");

Serializer->endElement();

Serializer->endElement();

Serializer->endBody();

Serializer->endEnvelope();

// 将该消息发送给web服务

Connector->EndMessage();

// // 读取响应

Reader.CreateInstance(__uuidof(SoapReader));

// 将reader联接到connector的输出字符串

Reader->Load(_variant_t((IUnknown*)Connector->OutputStream), "");

// 显示结果

printf("打印结果: %s\n", (const char*)Reader->RPCResult->text);

return;

}

int main(int argc, char* argv[])

{

CoInitialize(NULL);

Add();

CoUninitialize();

return 0;

}

接口是:

@WebService

public interface IClientLogService {

/**

* 上传日志

* @param file

* @return

*/

public String uploadLog(String arg1);

}

实现是:

public class ClientLogServiceImpl implements IClientLogService{

public String uploadLog(String arg) {

// TODO Auto-generated method stub

System.out.println("参数的值为:"+arg);

return "参数的值为:"+arg;

}

}

摘自cr266的专栏