android中的KSOAP2双ID异常(KSOAP2 double ID exception in android)
我在我的Android应用程序中使用KSOAP2,当我尝试执行特定的Web服务请求时,我得到了这个“双ID”异常。 哪里出错了? 请帮帮我。
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.dotNet = true; envelope.setOutputSoapObject(request); HttpTransportSE androidHttpTransport = new HttpTransportSE(SOAP_ADDRESS); SoapPrimitive response = null; try { androidHttpTransport.call(SOAP_ACTION, envelope); //<<--- Getting exception here response = (SoapPrimitive)envelope.getResponse(); } catch (Exception e) { e.printStackTrace(); Toast.makeText(getApplicationContext(), e+"", Toast.LENGTH_LONG).show(); }
堆栈跟踪 :
java.lang.RuntimeException: double ID at org.ksoap2.serialization.SoapSerializationEnvelope.read(SoapSerializationEnvelope.java:407) at org.ksoap2.serialization.SoapSerializationEnvelope.readUnknown(SoapSerializationEnvelope.java:273) at org.ksoap2.serialization.SoapSerializationEnvelope.read(SoapSerializationEnvelope.java:389) at org.ksoap2.serialization.SoapSerializationEnvelope.readUnknown(SoapSerializationEnvelope.java:273) at org.ksoap2.serialization.SoapSerializationEnvelope.read(SoapSerializationEnvelope.java:389) at org.ksoap2.serialization.SoapSerializationEnvelope.readUnknown(SoapSerializationEnvelope.java:273) at org.ksoap2.serialization.SoapSerializationEnvelope.read(SoapSerializationEnvelope.java:389) at org.ksoap2.serialization.SoapSerializationEnvelope.readUnknown(SoapSerializationEnvelope.java:273) at org.ksoap2.serialization.SoapSerializationEnvelope.read(SoapSerializationEnvelope.java:389) at org.ksoap2.serialization.SoapSerializationEnvelope.parseBody(SoapSerializationEnvelope.java:151) at org.ksoap2.SoapEnvelope.parse(SoapEnvelope.java:140) at org.ksoap2.transport.Transport.parseResponse(Transport.java:116) at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:235) at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:114) at com.menthatech.soap_login_test.SampleSoapTest_LoginActivity.onClick(SampleSoapTest_LoginActivity.java:94) at android.view.View.performClick(View.java:2408) at android.view.View$PerformClick.run(View.java:8816) at android.os.Handler.handleCallback(Handler.java:587) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:123) at android.app.ActivityThread.main(ActivityThread.java:4627) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:521) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) at dalvik.system.NativeStart.main(Native Method)
I am using KSOAP2 in my android application, and when I try to perform a particular webservice request, I got this "double ID" exception. Where i'am going wrong ? Please help me.
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.dotNet = true; envelope.setOutputSoapObject(request); HttpTransportSE androidHttpTransport = new HttpTransportSE(SOAP_ADDRESS); SoapPrimitive response = null; try { androidHttpTransport.call(SOAP_ACTION, envelope); //<<--- Getting exception here response = (SoapPrimitive)envelope.getResponse(); } catch (Exception e) { e.printStackTrace(); Toast.makeText(getApplicationContext(), e+"", Toast.LENGTH_LONG).show(); }
StackTrace :
java.lang.RuntimeException: double ID at org.ksoap2.serialization.SoapSerializationEnvelope.read(SoapSerializationEnvelope.java:407) at org.ksoap2.serialization.SoapSerializationEnvelope.readUnknown(SoapSerializationEnvelope.java:273) at org.ksoap2.serialization.SoapSerializationEnvelope.read(SoapSerializationEnvelope.java:389) at org.ksoap2.serialization.SoapSerializationEnvelope.readUnknown(SoapSerializationEnvelope.java:273) at org.ksoap2.serialization.SoapSerializationEnvelope.read(SoapSerializationEnvelope.java:389) at org.ksoap2.serialization.SoapSerializationEnvelope.readUnknown(SoapSerializationEnvelope.java:273) at org.ksoap2.serialization.SoapSerializationEnvelope.read(SoapSerializationEnvelope.java:389) at org.ksoap2.serialization.SoapSerializationEnvelope.readUnknown(SoapSerializationEnvelope.java:273) at org.ksoap2.serialization.SoapSerializationEnvelope.read(SoapSerializationEnvelope.java:389) at org.ksoap2.serialization.SoapSerializationEnvelope.parseBody(SoapSerializationEnvelope.java:151) at org.ksoap2.SoapEnvelope.parse(SoapEnvelope.java:140) at org.ksoap2.transport.Transport.parseResponse(Transport.java:116) at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:235) at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:114) at com.menthatech.soap_login_test.SampleSoapTest_LoginActivity.onClick(SampleSoapTest_LoginActivity.java:94) at android.view.View.performClick(View.java:2408) at android.view.View$PerformClick.run(View.java:8816) at android.os.Handler.handleCallback(Handler.java:587) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:123) at android.app.ActivityThread.main(ActivityThread.java:4627) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:521) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) at dalvik.system.NativeStart.main(Native Method)
原文:https://stackoverflow.com/questions/11861506
最满意答案
你可以简单地做:
/^[A-z]+$/
[Az]
将匹配所有字母(小写和大写)。^
和$
将确保只有这些字母匹配。
更新:
我原来的正则表达式
/^[Az]+$/
将匹配A
和z
之间A
字符,包括一些非字母答案,如下面的一些专家评论中所述。最好使用
/^[AZ]+$/i
或/^[A-Za-z]+$/
来匹配ASCII字母的输入字符串。preg_match('/^[A-Z]+$/i', "abcAbc^Xyz", $m); echo "4. "; var_dump($m);
OUTPUT
4. array(0) { }
测试用例#4是OP的评论, 只有当输入中有1个或更多的字母时, 才想匹配。 在测试用例4中可以看到匹配失败,因为输入字符串
abcAbc^Xyz
。
请注意,以上答案仅与ASCII字母匹配 ,不符合Unicode字符。You may use any of these 2 variants:
/^[A-Z]+$/i /^[A-Za-z]+$/
to match an input string of ASCII alphabets.
[A-Za-z]
will match all the alphabets (both lowercase and uppercase).^
and$
will make sure that nothing but these alphabets will be matched.Code:
preg_match('/^[A-Z]+$/i', "abcAbc^Xyz", $m); var_dump($m);
Output:
array(0) { }
Test case is for OP's comment that he wants to match only if there are 1 or more alphabets present in input. As you can see in test case that match failed because there was
^
in the input stringabcAbc^Xyz
.Note: Please note that above answer only matches ASCII alphabets and doesn't match Unicode characters. If you want to match unicode letters then use:
/^\p{L}+$/u
相关问答
更多-
这取决于你的正则表达风格。 如果它支持Unicode字符类(例如.NET), \p{L}匹配一个字母字符(在任何字符集中)。 It depends on your regex flavor. If it supports Unicode character classes (like .NET, for instance), \p{L} matches a letter character (in any character set).
-
你可以简单地做: /^[A-z]+$/ [Az]将匹配所有字母(小写和大写)。 ^和$将确保只有这些字母匹配。 更新: 我原来的正则表达式/^[Az]+$/将匹配A和z之间A字符,包括一些非字母答案,如下面的一些专家评论中所述。 最好使用/^[AZ]+$/i或/^[A-Za-z]+$/来匹配ASCII字母的输入字符串。 preg_match('/^[A-Z]+$/i', "abcAbc^Xyz", $m); echo "4. "; var_dump($m); OUTPUT 4. array(0) { } ...
-
正则表达式匹配所有字符后的另一个正则表达式匹配(Regular Expression to Match All Characters after another Regex Match)[2023-03-11]
你错过了一个< 。 你想要一个后视( (?<=...) ),但你有一个前瞻( (?=...) )。 换句话说,你需要(?<=\\Downloads\\.*?\\).* 。 You're missing a single <. You want a look-behind ((?<=...)), but you have a look-ahead ((?=...)). In other words, you need (?<=\\Downloads\\.*?\\).*. -
正则表达式 - 过滤字母和非字母数字字符(Regular Expressions - Filtering alphabetic and non-alphanumeric characters)[2024-01-04]
\w代码与单个字母数字字符匹配,如集合[0-9A-Za-z_] 。 *量词与{0,}量词相同,它重复匹配零次或多次。 在量词之后加一个问号使其变得懒惰,即它尽可能少地匹配尽可能少的字符。 那么, \w*? 懒惰地匹配零个或更多个字母数字字符。 如果你想过滤不能在数字中的字符,为什么不使用负数? 这将匹配任何不是减号或数字的字符: [^\-\d] The \w code matches a single alphanumeric character, like the set [0-9A-Za-z_]. T ... -
目前尚不清楚你的意思,但这是一个匹配只包含空格的字符串的正则表达式: /\A\s*\z/ It is not clear what you mean, but this is a regex that matches strings that include only whitespaces: /\A\s*\z/
-
JavaScript正则表达式匹配一些特殊字符[关闭](JavaScript Regular Expression to match some special characters [closed])[2022-03-14]
只需添加-和. 在像这样的角色类: /^[-.a-zA-Z\s]+$/ Just add - and . in the character class like this : /^[-.a-zA-Z\s]+$/ -
你没有指定语言,这里是你如何在javascript中做到这一点 var crazyString = "bla/$ bla @ me *"; var sanitized = crazyString.replace(/[()\\\/$#%@*]/g, ' '); 在regex []是一个字符集。 它表示以下集合中的任何字符 。 还有一些特殊的字符集,如[az] ,表示从a到z的任何小写字符。 您也可以使用[3-9]进行数字范围的操作,只能匹配3到9之间的数字。 请注意,在这两个特殊字符集中,连字符是一个特殊字 ...
-
为确保字符串仅包含(ASCII)字母数字字符,下划线和空格,请使用 ^[\w ]+$ 说明: ^ # Anchor the regex at the start of the string [\w ] # Match an alphanumeric character, underscore or space + # one or more times $ # Anchor the regex at the end of the string To ensure ...
-
如果在服务器端进行验证,则可以使用以下模式: ^\w*(\s\w*)?$ \w在.Net中是Unicode识别的 - 它应该包括所有字母。 请注意\w还包括下划线和其他字连接器。 您可以使用[\p{L}\p{Nd}]代替\w来禁止它们。 另请参见: 字符类 If validation occurs at server side, you can use the pattern: ^\w*(\s\w*)?$ \w in .Net is Unicode aware - it should include a ...
-
匹配1字母的正则表达式,1位数字并允许所有特殊字符(regular expression for match 1 alphabet, 1 digit and allow all special characters)[2022-02-18]
只需在角色类中添加您想要允许的特殊字符: ^(?=.*[0-9]+.*)(?=.*[a-zA-Z]+.*)[0-9a-zA-Z.!&/()=?+*~#'_:.,;-]{6,}$ Simply add the special characters you want to allow in the character class: ^(?=.*[0-9]+.*)(?=.*[a-zA-Z]+.*)[0-9a-zA-Z.!&/()=?+*~#'_:.,;-]{6,}$