2011-09-20 563 views
2

我使用的HttpClient#執行(HttpPost,ResponseHandler所)org.apache.http.client.HttpResponseException:內部服務器錯誤而發佈的XML字符串到服務器

它工作正常發送XML字符串到我的web應用程序當字符串只包含一個標記時,如果兩個相同的標記位於根標記之後,則它返回內部服務器錯誤。例如:

<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) 

這些HttpResponseExceptions的原因是什麼?

回答

3

錯誤來自您的服務器。 XML可能會正確生成,但服務器在獲取時遇到錯誤。您需要調試Web應用程序以找出錯誤。

希望這會有所幫助。

+0

服務器端可能出現哪種類型的錯誤? – Nuraiz

+0

這是你的服務器,對吧?你需要進入處理服務器請求的代碼並在那裏進行調試。 –

+0

感謝您的幫助。我已經解決了這個問題。該錯誤屬於財產。我使用** google.appengine.ext.db#StringProperty(required = True)**爲我的xml字符串,我已將其更改爲** google.appengine.ext.db#TextProperty(required = True)** – Nuraiz

0

我有類似的問題。在我的情況下,服務器沒有正確處理POST請求。當我更改爲GET時,異常未到。