Android 警告:忽略匿名内部类(org.ksoap2.transport.KeepAliveHttpsTransportSE$1)的InnerClasses属性
当使用Android 警告:忽略匿名内部类(org.ksoap2.transport.KeepAliveHttpsTransportSE$1)的InnerClasses属性,android,exchange-server,exchangewebservices,ksoap,Android,Exchange Server,Exchangewebservices,Ksoap,当使用ksoap2-Android-assembly-2.5.8-jar-with-dependencies.jar将Android项目编译为引用库(外部jar)时,我收到以下警告: [2012-03-20 11:50:50 - AddressBook] Dx warning: Ignoring InnerClasses attribute for an anonymous inner class (org.ksoap2.transport.KeepAliveHttpsTransportSE$1
ksoap2-Android-assembly-2.5.8-jar-with-dependencies.jar将Android项目编译为引用库(外部jar)时,我收到以下警告:
[2012-03-20 11:50:50 - AddressBook] Dx warning: Ignoring InnerClasses attribute for an anonymous inner class
(org.ksoap2.transport.KeepAliveHttpsTransportSE$1) that doesn't come with an
associated EnclosingMethod attribute. This class was probably produced by a
compiler that did not target the modern .class file format. The recommended
solution is to recompile the class from source, using an up-to-date compiler
and without specifying any "-target" type options. The consequence of ignoring
this warning is that reflective operations on this class will incorrectly
indicate that it is *not* an inner class.
我正在尝试从android客户端访问EWS SOAP服务,我的代码是:
String NAMESPACE = "http://schemas.microsoft.com/exchange/services/2006/messages";
String SOAP_ACTION = "http://schemas.microsoft.com/exchange/services/2006/messages";
String METHOD_NAME = "GetUserAvailability";
String URL = "https://vpnqrd0302.outlook.com/EWS/Exchange.asmx";
String result = null;
Object resultRequestSOAP = null;
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
androidHttpTransport.debug = true;
List<HeaderProperty> headerList = new ArrayList<HeaderProperty>();
headerList.add(new HeaderProperty("Authorization", "Basic "
+ org.kobjects.base64.Base64
.encode("temp@tempsuer.onmicrosoft.com:Password1"
.getBytes())));
try {
androidHttpTransport.call(SOAP_ACTION, envelope, headerList);
String requestDumpString = androidHttpTransport.requestDump;
System.out.println("requestDump : " + requestDumpString);
resultRequestSOAP = envelope.getResponse(); // Output received
System.out.println("resultRequestSOAP : " + resultRequestSOAP);
result = resultRequestSOAP.toString(); // Result string
System.out.println("OUTPUT : " + result);
} catch (Exception e) {
e.printStackTrace();
}
我知道这是一个老生常谈的问题,但如果有人像我一样在这里犯了错误:您提到的警告是由一个匿名的内部类以及ksoap2是使用Java1.3兼容性编译的事实(我认为是为了与J2ME兼容)引起的。除非您在这些类上做一些反射工作(甚至在这种情况下:仅当您检查某个类是否是内部类时),否则可以安全地忽略此警告
更好的是,这个特别的警告是通过ksoap2 android的2.6.4版修复的(请参阅)
您的错误与此完全无关,更可能是由于您试图调用的Web服务使用不当造成的。我看到了这一点,通常的答案是忽略内部类警告,因为这是包含jar文件的结果。尽管在您的情况下,您可能希望获取源代码并将其编译到代码中。
03-20 12:21:16.488: W/System.err(7919): SoapFault - faultcode: 'a:ErrorSchemaValidation' faultstring: 'The request failed schema validation: Could not find schema information for the element 'http://schemas.microsoft.com/exchange/services/2006/messages:GetUserAvailability'.' faultactor: 'null' detail: org.kxml2.kdom.Node@4801ce80
03-20 12:21:16.491: W/System.err(7919): at org.ksoap2.serialization.SoapSerializationEnvelope.parseBody(SoapSerializationEnvelope.java:136)
03-20 12:21:16.491: W/System.err(7919): at org.ksoap2.SoapEnvelope.parse(SoapEnvelope.java:137)
03-20 12:21:16.495: W/System.err(7919): at org.ksoap2.transport.Transport.parseResponse(Transport.java:96)
03-20 12:21:16.495: W/System.err(7919): at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:189)
03-20 12:21:16.499: W/System.err(7919): at net.vivekiyer.GAL.ActiveSyncManager.getUserAvailabilityRequest(ActiveSyncManager.java:978)
03-20 12:21:16.499: W/System.err(7919): at net.vivekiyer.GAL.CorporateAddressBook$GALSearch.doInBackground(CorporateAddressBook.java:510)
03-20 12:21:16.507: W/System.err(7919): at net.vivekiyer.GAL.CorporateAddressBook$GALSearch.doInBackground(CorporateAddressBook.java:1)
03-20 12:21:16.507: W/System.err(7919): at android.os.AsyncTask$2.call(AsyncTask.java:185)
03-20 12:21:16.507: W/System.err(7919): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
03-20 12:21:16.511: W/System.err(7919): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
03-20 12:21:16.511: W/System.err(7919): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
03-20 12:21:16.511: W/System.err(7919): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
03-20 12:21:16.515: W/System.err(7919): at java.lang.Thread.run(Thread.java:1096)