明確な質問かどうかはわかりません。Web サービスから xml 応答を取得する必要があります。Web サービスの URL、ユーザー名、パスワード、xml 本文などの詳細があります。また、xml 応答を文字列で取得できます。変数.xml文字列を解析するための便利なリンクを教えてもらえますか? xmlを取得するためのコードを共有しています注:-commons-httpclient-3.1、commons-codec-1.6、commons-logging-1.1.1、junit-4.10ライブラリがあることを確認してください
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.UsernamePasswordCredentials;
import org.apache.commons.httpclient.auth.AuthScope;
import org.apache.commons.httpclient.methods.PostMethod;
public class AbstractService
{
@SuppressWarnings( "deprecation" )
protected String postForString( final String requestUrl, final String requestBody )
{
final StringBuilder result = new StringBuilder();
HttpClient client = new HttpClient();
try
{
PostMethod postRequest = new PostMethod( getAbsoluteUrl( requestUrl ) );
postRequest.addRequestHeader( WebServiceClientConstants.CONTENT_TYPE,
WebServiceClientConstants.APPLICATION_XML );
postRequest.setRequestBody( WebServiceClientConstants.REQUEST_HEADER + requestBody );
client.getState()
.setCredentials(
new AuthScope( WebServiceClientConstants.HOST, WebServiceClientConstants.PORT,
AuthScope.ANY_REALM ),
new UsernamePasswordCredentials( WebServiceClientConstants.USERNAME,
WebServiceClientConstants.PASSWORD ) );
int responseCode = client.executeMethod( postRequest );
System.out.println( "[REQUEST][" + postRequest.getURI().toString() + "]" );
System.out.println( "[STATUS][" + postRequest.getStatusLine().toString() + "]" );
if ( HttpStatus.SC_OK == responseCode )
{
String data = null;
final InputStream responseStream = postRequest.getResponseBodyAsStream();
final BufferedReader bufferedReader = new BufferedReader( new InputStreamReader( responseStream,
WebServiceClientConstants.UTF_8_ENCODING ) );
while ( ( data = bufferedReader.readLine() ) != null )
{
result.append( data );
}
}
postRequest.releaseConnection();
}
catch ( Exception e )
{
e.printStackTrace();
}
return result.toString();
}
private String getAbsoluteUrl( String requestUrl )
{
return WebServiceClientConstants.SERVIE_BASE_URL + requestUrl;
}
}
WebServiceClientConstants インターフェイス
package com.test.service.info;
public interface WebServiceClientConstants
{
String PROTOCOL = "http://";
String HOST = "youraddress.blah.test.com";
Integer PORT = 8080;
String SERVIE_BASE_URL = "http://youraddress.blah.test.com:8080/test/seam/resource/Services/";
String USERNAME = "Username";
String PASSWORD = "password";
String REQUEST_HEADER = "<?xml version=\"1.0\"?>";
String CONTENT_TYPE = "Content-Type";
String APPLICATION_XML = "application/xml";
String UTF_8_ENCODING = "UTF-8";
}
MenuService インターフェイス
public interface MenuService
{
String getMenu();
}
MenuServiceImpl.java
public class MenuServiceImpl extends AbstractService implements MenuService
{
@Override
public String getMenu()
{
String requestUrl = "getMenu";
String requestBody = "<ServiceRequest>" + "<ShortName>AppName</ShortName>"
+ "</ServiceRequest>";
return postForString( requestUrl, requestBody );
}
}
次に、いくつかのアクティビティで書き込みます
MenuService menuService = new MenuServiceImpl();
String prMenu = menuService.getMenu();
Assert.assertNotNull( prMenu );
test.setText(prMenu);
これで、xml 応答が prMenu 変数に格納されました。これは http://www.coders-global.com/works/dev/menuserivicetemp.xmlのようになります。この Xml 文字列を解析するにはどうすればよいですか。リンクを見てください。複雑に見えます。以前に他のスレッドでこのリンクを解析する方法を尋ねたことがありますが、返信はそれほど役に立ちませんでした。有用なリンクや提案があれば教えてください。