gpt4 book ai didi

android - 在 android 中使用命名空间制作 SoapRequest 对象

转载 作者:行者123 更新时间:2023-11-30 03:41:01 25 4
gpt4 key购买 nike

我正在从事一个项目,我必须从以下代码创建一个 SOAP 请求对象:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:mod="http://www.tmforum.org/xml/tip/model" xmlns:prob="http://www.tmforum.org/xml/tip/cbe/problem" xmlns:geo="http://www.tmforum.org/xml/tip/cbe/loc/geo" xmlns:loc="http://www.tmforum.org/xml/tip/cbe/loc" xmlns:tt="http://www.tmforum.org/xml/tip/cbe/tt" xmlns:ent="http://www.tmforum.org/xml/tip/internal/entity" xmlns:ext="http://www.tmforum.org/xml/tip/cbe/problem/extensions">
<soapenv:Header/>
<soapenv:Body>
<mod:retrieveProblemRequest>
<!--Optional:-->
<mod:customerProblem>
<!--Optional:-->
<prob:problemId>0005004426</prob:problemId>

</mod:customerProblem>
</mod:retrieveProblemRequest>
</soapenv:Body>
</soapenv:Envelope>

我正在使用 KSOAP2 创建请求对象,但在分配命名空间时遇到问题,因此发送的请求总是不正确。

请提供将此 SoapRequest 转换为 Android 中的 SoapObject 的代码..

编辑: 我的代码如下:

private static String SOAP_ACTION1 = "/BusinessServices/Inbound/TIP_R4GCanonicalModel_model_problemservicev1dot3-service0.serviceagent/ProblemServiceV1dot3Endpoint0/retrieveProblem";
private static String REQUEST_TARGET_NAMESAPCE="http://xmlns.example.com/1362214927265/";
private static String TARGET_NAMESPACE_MOD = "http://www.tmforum.org/xml/tip/model/";
private static String NAMESPACE_PROB="http://www.tmforum.org/xml/tip/cbe/problem/";
private static String METHOD_NAME = "retrieveProblem";
private static String URL = "http://10.128.28.44:10005/BusinessServices/Inbound/ProblemService_proxy.serviceagent/ProblemServiceV1dot3Endpoint0";
public static String LOG_TAG = "SOAPRequestResponseActivity";


@Override
public void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btnFar = (Button) findViewById(R.id.btnFar);
btnFar.setOnClickListener(new View.OnClickListener()

{
@Override
public void onClick(View v)

{

// Initialize soap request + add parameters

SoapObject request = new SoapObject(REQUEST_TARGET_NAMESAPCE,METHOD_NAME);

SoapObject retrieveInfo=new SoapObject(TARGET_NAMESPACE_MOD,"retrieveProblemRequest");

SoapObject customerObject=new SoapObject(TARGET_NAMESPACE_MOD, "customerProblem");

PropertyInfo info=new PropertyInfo();
info.setNamespace(NAMESPACE_PROB);
info.setName("problemId");
info.setValue("0005004426");

customerObject.addProperty(info);
retrieveInfo.addSoapObject(customerObject);
request.addSoapObject(retrieveInfo);

Log.i(LOG_TAG, "===Request soap object after params=="
+ request.toString());

// Declare the version of the SOAP request

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);


envelope.implicitTypes=true;
envelope.setOutputSoapObject(request);

try {

HttpTransportSE androidHttpTransport = new HttpTransportSE(
URL);



ArrayList<HeaderProperty> headerProperty = new ArrayList<HeaderProperty>();

headerProperty.add(new HeaderProperty("SOAPAction", "/BusinessServices/Inbound/TIP_R4GCanonicalModel_model_problemservicev1dot3-service0.serviceagent/ProblemServiceV1dot3Endpoint0/retrieveProblem"));

androidHttpTransport.call(SOAP_ACTION1, envelope,headerProperty);

一旦调用 Call 方法,它就会抛出错误代码为 500 的异常 HttpRequestFailed。由于请求在某处不正确,服务器无法解析它。

请为我提供合适的解决方案。

最佳答案

我遇到了一个名为 ksoap2-android 的库这非常有帮助,您可以试试这个。这是我用来调用网络方法的类文件

 public class CallSOAP {

private String SOAP_ACTION="your action url";
private String OPERATION_NAME="";//The web method OR web service you are going to call
private final String WSDL_TARGET_NAMESPACE=SOAP_ACTION;
private final String SOAP_ADDRESS=Configuration.WEB_SERVICE_URL;//ip-address of serever where you host your service
private Exception exception;
private String ErrorMsg="";
private String TERST_URL="" ;
public Object call(String MethodeName,ArrayList<PropertyInfo> Parameters){

this.OPERATION_NAME=MethodeName;
SoapObject request = new SoapObject(WSDL_TARGET_NAMESPACE, OPERATION_NAME);
if(Parameters != null && Parameters.size()>0){
for(PropertyInfo propertyInfo : Parameters){
request.addProperty(propertyInfo);
}
}

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet= true;
envelope.setOutputSoapObject(request);
HttpTransportSE httpTransport =null;
if(!this.TERST_URL.equals(""))
httpTransport = new HttpTransportSE(this.TERST_URL);
else
httpTransport = new HttpTransportSE(SOAP_ADDRESS);
Object Response =null;
try{
httpTransport.call(SOAP_ACTION+OPERATION_NAME, envelope);
Response=envelope.getResponse();
}
catch (SocketTimeoutException ex) {
this.ErrorMsg="Unable to connect";
Response=null;
this.exception=ex;
}
catch (IOException ie) {
this.ErrorMsg="Unable to connect";
Response=null;
this.exception=ie;
}
catch (Exception e) {
this.ErrorMsg="Unable to connect";
Response=null;
this.exception=e;
}
return Response;
}
}

请注意,我使用的是用 ASP.NET 框架编写的网络服务。这就是我提供的原因

envelope.dotNet= true;

引用:看这个tutorial

并查看此 Question

关于android - 在 android 中使用命名空间制作 SoapRequest 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15757088/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com