سلام
یه وب سرویس نوشته شده با متدولوژی rpc encoded . و من اینو با پلاگین axis2 import می کنم.
دو تا پوشه برایمن میسازه که یکیش : F:\projects\FinallTCTGenarate\src\ir\tct\www\services\getpayidbillid
و دیگری : F:\projects\FinallTCTGenarate\src\org\example\www\getpayidbillid
این است.
داخل پوشه که example داره کلاس های : input و output داخل اون و کلاس های OPRResponse که برای گرفتن داده و کلاس OPR که برای فرستادن داده ها استفاده میشه.
و در پوشه services کلاس های کلاس های OPRResponse که برای گرفتن داده به صورت OMElement و کلاس OPR برای ارسال داداه به صورت OMElement است ویک کلاس به نام stub که کلاس opr داخل پوشه سرویس می گیره و به سمت سرور ارسال میکنه.
کد نوشته شده :
public class Run
{
static PaymentTelOPR paymentTelOPR = new PaymentTelOPR();
static ir.tct.www.services.getpayidbillid.PaymentTelOPR opr=new ir.tct.www.services.getpayidbillid.PaymentTelOPR();
static PaymentTelOPRResponse telOPRResponse = new PaymentTelOPRResponse();
public static void main(String[] args) {
GetPayIDBillIDStub stub= null;
try {
stub = new GetPayIDBillIDStub("http://80.191.40.113:8280/services/GetPayIDBillID_Proxy");
} catch (AxisFault axisFault) {
axisFault.printStackTrace();
}
//**********************start input *****************
PaymentInput input = new PaymentInput();
input.setPassword("123456");
input.setTelephone(2122000015);
input.setUsername("USERTRJ");
paymentTelOPR.setPaymentTelOPRRequest(input);
//***************************end input *****************
org.apache.axiom.om.OMFactory factory = org.apache.axiom.om.OMAbstractFactory.getOMFactory();
factory.createOMNamespace("http://www.example.org/GetPayIDBillID/","ns1");
factory.createOMElement("http://www.example.org/GetPayIDBillID/",
"PaymentTelOPR",
"ns1");
try {
opr.setPaymentTelOPRRequest(paymentTelOPR.getOMElement(PaymentTelOPR.MY_QNAME, factory));
} catch (ADBException e) {
e.printStackTrace();
}
if (stub != null) {
try {
stub.paymentTelOPR(opr);
} catch (RemoteException e) {
e.printStackTrace();
}
}else {
System.out.println("stub = " + stub.toString() +"error" );
}
}
اطلاعاتی که سمت سرور ارسال میکنه به شکل :
<?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><ns2:PaymentTelOPR xmlns:ns2="http://www.tct.ir/Services/GetPayIDBillID/"><PaymentTelOPRRequest><ns1:PaymentTelOPR xmlns:ns1="http://www.example.org/GetPayIDBillID/"><PaymentTelOPRRequest><username>USERTRJ</username><password>123456</password><Telephone>2122000015</Telephone></PaymentTelOPRRequest></ns1:PaymentTelOPR></PaymentTelOPRRequest></ns2:PaymentTelOPR></soapenv:Body></soapenv:Envelope>
و جواب از سمت سرور می گیره ولی نمی تون ترجمه یا parse کن و پیغام خطا میده.
Exception in thread "main" java.lang.IllegalArgumentException: The MessageContext does not have an associated SOAPFault.
at org.apache.axis2.util.Utils.getInboundFaultFromMessageContext(Utils.java:556)
at org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:375)
at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:421)
at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:229)
at org.apache.axis2.client.OperationClient.execute(OperationClient.java:165)
at mypackage.GetPayIDBillIDStub.paymentTelOPR(GetPayIDBillIDStub.java:190)
at Run.main(Run.java:59)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
به نظر خود من مشکل از سمت سرور اطلاعاتی که می فرسته ناقص.
یا نحوه کد زنی من مشکل داره .
اگه نمونه مثال هم داشتید برای من ارسال کنید.
با تشکر رستمی.