SOAP-response från skånetrafikens API

Diskussion i 'Frågor, support och diskussion' startad av ChrisNexus, 15 jul 2012.

  1. ChrisNexus

    ChrisNexus Kid Droid Medlem

    Blev medlem:
    8 jan 2011
    Inlägg:
    40
    Mottagna gillanden:
    7

    MINA ENHETER

    Tjena. Får ibland detta exception: unexpected type(position:END_DOCUMENT null@1:1 in java.io InputStreamReader@414fae00) och ibland detta: Protocol not found, med samma kod. Förstår inte vad jag gör för fel, har provat ett oändligt antal kombinationer av NAMESPACE-namn och METHOD-namn osv men inget fungerar. Kan ni se vad som inte står rätt till, eller är det skånetrafikens API det är fel på?

    Jag har lyckats anropa en annan webservice med samma kod, så det kanske bara är fel parametervärden jag använder?

    Länk till skånetrafikens API: http://www.labs.skanetrafiken.se/api.asp
    Dataschema för metoden Querypage: http://www.labs.skanetrafiken.se/v2.2/GetStartEndPoint.xsd
    Exempel på anrop: http://www.labs.skanetrafiken.se/v2.2/querypage.asp?inpPointFr=lund&inpPointTo=ystad

    Kod:
    public class KSoap2Activity extends Activity {
    	private static final String SOAP_ACTION =  "http://www.etis.fskab.se/v1.0/ETISws/querypage";
    	private static final String METHOD_NAME = "querypage";
    	private static final String NAMESPACE = "http://www.etis.fskab.se/v1.0/ETISws/";
    	private static final String URL = "http://www.labs.skanetrafiken.se/v2.2/querypage.asp";
    
    	@Override
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.main);
    
    		TextView tv = (TextView) findViewById(R.id.text);
    
    		SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
    		request.addProperty("inpPointFr ", "lund c");
    		request.addProperty("inpPointTo", "ystad");
    		SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    		envelope.dotNet = true;
    		envelope.setOutputSoapObject(request);
    		HttpTransportSE ht = new HttpTransportSE(URL);
    		ht.debug = true;
    
    		try {
    			ht.call(SOAP_ACTION, envelope);
    			SoapPrimitive response = (SoapPrimitive)envelope.getResponse();
    			tv.setText("Message :" + response.toString());
    		} catch (Exception e) {
    			e.printStackTrace();
    			tv.setText(e.getMessage()+ ht.requestDump);
    		}
    	}
    }  
     
  2. e7andy

    e7andy Professional Droid Hedersmedlem

    Blev medlem:
    14 okt 2009
    Inlägg:
    2 349
    Mottagna gillanden:
    835
    Telefon:
    Huawei P10 Plus

    MINA ENHETER

    Telefon:
    Huawei P10 Plus
    Telefon 2:
    Nexus 5
    Telefon 3:
    ADP1
    Övrigt:
    LG G Watch R, ChromeCast
    ChrisNexus gillar detta.
  3. ChrisNexus

    ChrisNexus Kid Droid Medlem

    Blev medlem:
    8 jan 2011
    Inlägg:
    40
    Mottagna gillanden:
    7

    MINA ENHETER

    Ah, ok.

    Så jag trycker alltså in parametrarna manuellt och läser av xml dokumentet som returneras, på lämpligt sätt? Skulle det då kanske vara smidigast att skriva en "egen" parser som läser av precis det jag vill ha då kanske? Eller anses det som dålig programmering i och med att det kanske blir lite väl "hårdkodat"?
     
    Last edited: 16 jul 2012
  4. e7andy

    e7andy Professional Droid Hedersmedlem

    Blev medlem:
    14 okt 2009
    Inlägg:
    2 349
    Mottagna gillanden:
    835
    Telefon:
    Huawei P10 Plus

    MINA ENHETER

    Telefon:
    Huawei P10 Plus
    Telefon 2:
    Nexus 5
    Telefon 3:
    ADP1
    Övrigt:
    LG G Watch R, ChromeCast
    Ja, det verkar vara en hybridlösning.

    Jag hade skapat upp entiter för det jag vill hantera och sedan använda XmlPullParser för att populera entiterna:
    http://developer.android.com/reference/org/xmlpull/v1/XmlPullParser.html

    Ungefär så gör jag med ksoap2 nu. Varje entitet kan skapa upp sig själv från ett SoapObject som jag skickar som parameter till entitetens konstruktor.
     
    ChrisNexus gillar detta.