android - org.apache.http.client.HttpResponseException : Internal Server Error while posting xml String to server

标签 android xml httpclient

我使用 httpClient#execute(HttpPost, ResponseHandler) 向我的 Web 应用程序发送 xml 字符串

当字符串只包含一个标签时它工作正常,但如果根标签后面有两个相同的标签,它会返回内部服务器错误。例如:

<Class>
        <Student>Some Elements and Attributes</Student>
        <Student>Some Elements and Attributes</Student>
</Class>

我的代码用于创建 xml 字符串:

DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();

//root element
Document document = docBuilder.newDocument();
Element rootElement = document.createElement("Class");
document.appendChild(rootElement);

Element student = document.createElement("Student");
rootElement.appendChild(student);

Attr name = document.createAttribute("Name");
name.setValue("");
student.setAttributeNode(name);

//Courses
Element courses = document.createElement("Courses");
Element course = document.createElement("Course");
Attr name = document.createAttribute("Name");
name.setValue("any name");
level.setAttributeNode(name);
courses.appendChild(course);
student.appendChild(courses);

// write the content into xml string
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer();
StringWriter writer = new StringWriter();
Result result = new StreamResult(writer);
Source source = new DOMSource(document);
transformer.transform(source, result);
writer.close();
xml = writer.toString();

以下是发送 xml 字符串的代码:

String url = "My URL string";

DefaultHttpClient httpClient = new DefaultHttpClient();   
ResponseHandler<String> res = new BasicResponseHandler();

List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("param1", "student name"));
nameValuePairs.add(new BasicNameValuePair("param2", xmlString));

HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

String response = httpClient.execute(httpPost, res);

这段代码造成了问题。 StackTrace 在这里:

09-21 00:58:29.486: WARN/System.err(7450): org.apache.http.client.HttpResponseException: Internal Server Error
09-21 00:58:29.490: WARN/System.err(7450):     at org.apache.http.impl.client.BasicResponseHandler.handleResponse(BasicResponseHandler.java:71)
09-21 00:58:29.494: WARN/System.err(7450):     at org.apache.http.impl.client.BasicResponseHandler.handleResponse(BasicResponseHandler.java:59)
09-21 00:58:29.497: WARN/System.err(7450):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:657)
09-21 00:58:29.501: WARN/System.err(7450):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:627)
09-21 00:58:29.501: WARN/System.err(7450):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:616)
09-21 00:58:29.505: WARN/System.err(7450):     at com.example.httpandroidtutorial.HttpAndroidTutorialActivity.onClick(HttpAndroidTutorialActivity.java:122)
09-21 00:58:29.509: WARN/System.err(7450):     at android.view.View.performClick(View.java:2461)
09-21 00:58:29.513: WARN/System.err(7450):     at android.view.View$PerformClick.run(View.java:8888)
09-21 00:58:29.517: WARN/System.err(7450):     at android.os.Handler.handleCallback(Handler.java:587)
09-21 00:58:29.517: WARN/System.err(7450):     at android.os.Handler.dispatchMessage(Handler.java:92)
09-21 00:58:29.521: WARN/System.err(7450):     at android.os.Looper.loop(Looper.java:123)
09-21 00:58:29.525: WARN/System.err(7450):     at android.app.ActivityThread.main(ActivityThread.java:4627)
09-21 00:58:29.529: WARN/System.err(7450):     at java.lang.reflect.Method.invokeNative(Native Method)
09-21 00:58:29.533: WARN/System.err(7450):     at java.lang.reflect.Method.invoke(Method.java:521)
09-21 00:58:29.533: WARN/System.err(7450):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
09-21 00:58:29.537: WARN/System.err(7450):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
09-21 00:58:29.540: WARN/System.err(7450):     at dalvik.system.NativeStart.main(Native Method)

这些 HttpResponseException 的原因是什么?

最佳答案

错误来自您的服务器。 XML 可能会正确生成,但服务器在获取它时遇到错误。您需要调试 Web 应用程序以找出问题所在。

希望这有帮助。

关于android - org.apache.http.client.HttpResponseException : Internal Server Error while posting xml String to server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7483203/

相关文章:

java - 应用程序崩溃并出现 java.lang.RuntimeException : Unable to start activity ComponentInfo error

Java:用简单的 XML 解析 XML

android - java.lang.NoSuchFieldError : org. apache.http.message.BasicHeaderValueFormatter.INSTANCE android

Android后台网络错误恢复

javascript - Android 原生浏览器中的双击行为

javascript - 在 JavaScript 中将 XML 属性转换为 HTML 标签

c# - 如何使用 Get 和 c# HttpClient 发送复杂对象

c# - 为什么 .Net HttpClient 发布请求很慢(当 fiddler 未运行时)?

java - 尝试通过 Google plus 实现登录的 Android 应用程序显示奇怪的系统错误

android - 有没有办法使用 SDK 将时钟与 Microsoft Band 同步?