我正在尝试通过使用BlackBerry Java插件for Eclipse将请求xml传递给字符串来使用SOAP响应xml。在过去的两天里,我一直在寻找解决方法。
我已附上以下示例代码。
public String CheckXml()
{
final String requestXml="<SOAP:Envelope xmlns:SOAP=\"http://schemas.xmlsoap.org/soap/envelope/\"><header xmlns=\"http://schemas.cordys.com/General/1.0/\"></header><SOAP:Body><authenticateAgainstOID xmlns=\"http://schemas.cordys.com/OIDAuthentication\"><stringParam>HEMANTS_MUM013</stringParam><stringParam1>TATA2012</stringParam1></authenticateAgainstOID></SOAP:Body></SOAP:Envelope>";
final String HOST_ADDRESS = "http://xyz.com/cordys/com.eibus.web.soap.Gateway.wcp?organization=o=B2C,cn=cordys,cn=cbop,o=tatamotors.com&SAMLart=MDFn+8e5dRDaRMRIwMY7nI84eEccbx+lIiV0VhsOQ7u+SKG6n5+WNB58";
String result="";
try {
HttpConnection url=(HttpConnection)Connector.open(HOST_ADDRESS);
url.setRequestProperty("Content-Type", "text/xml");
url.setRequestMethod(HttpConnection.GET);
OutputStreamWriter writer=new OutputStreamWriter(url.openOutputStream());
writer.write(requestXml);
writer.flush();
writer.close();
StringBuffer buffer1=new StringBuffer();
InputStreamReader reader=new InputStreamReader(url.openInputStream());
StringBuffer buffer=new StringBuffer();
char[] cbuf=new char[2048];
int num;
while (-1 != (num = reader.read(cbuf))) {
buffer.append(cbuf, 0, num);
}
String result1 = buffer.toString();
} catch (Exception e) {
System.out.println(e);
}
return result;
}
答案 0 :(得分:0)
我认为你没有问http. getResponseCode()
的主要问题。我认为BB在你打电话之前不会进行任何互动。
我也会在真实设备上小心这段代码。在黑莓手机上搜索正确的开启连接。
答案 1 :(得分:0)
我注意到您没有在请求中包含SoapAction标头。
SOAP Web服务通常具有固定的URL,并且使用SoapAction标头选择不同的方法。您可以通过在浏览器中打开WSDL并检查要调用的方法的格式来检查标头。
一旦知道要选择哪个操作,请将其设置为常规http标头:
url.setRequestProperty("SOAPAction", <your action here>);
您的代码中的另一个问题来源是您正在使用旧的HttpConnection
类,该类需要根据传输类型(MDS,BIS,Wi-Fi等)向URL添加后缀。除非您的目标是OS 4.5及更低版本,否则您不需要使用此旧版。所以看看ConnectionFactory
类,它更容易使用。它从OS 5.0开始提供。