2012-08-15 3 views
6

지금까지 PHP 클라이언트와 VB.NET 클라이언트를 만들었습니다. 둘 다 성공적으로 PHP 웹 서비스를 호출합니다. 후자가 작동하도록하려면 SourceForge에서 SoapUI 도구를 사용해야했습니다. 그것은 내 wsdl이 WS-I를 따르지 않는다고 말했습니다. 비누 요청을 직접 편집 할 수 있도록 대화 형으로 서비스를 테스트하기 위해 Pro 버전이 필요하지 않았습니다. 내 WSDL을 수정하고 내 VB.Net 클라이언트를 작동 시키면 안드로이드가 여전히 문제가됩니다.ksoap2-android를 사용하여 PHP 웹 서비스를 올바르게 호출하려면 어떻게해야합니까?

나는 또한 attached the source code for ksoap2-andriod이므로 디버깅하는 동안 단계별로 수행 할 수 있습니다. 도움이되었지만 소스가 포함되지 않은 번들로 된 종속성이 있습니다 (특히 "kxml2 v1.6"). 누구든지 소스 zip이나 Jar를 가리켜 주시면 고맙겠습니다.

내 안드로이드 클라이언트에서 PHP webservice를 호출 할 때 발생하는 오류입니다. 는 WSDL의 \ XML을 구문 분석하지 못할 말해

org.xmlpull.v1.XmlPullParserException: expected: START_TAG {http://schemas.xmlsoap.org/soap/envelope/}Envelope (position:START_TAG <definitions name='naturallyIrrationalsoapserver' targetNamespace='http://www.naturallyIrrational.com'>@10:42 in [email protected]) 

그것 - 10.42 @ poistion 오프닝 정의 태그의 끝입니다.

WSDL의 WS-I 준수로 인해이 서비스 네임 스페이스 정의가 Ksoap2에 의해 해석되는 것과 관련이 있다고 생각합니다. 여기 내 안드로이드 클라이언트 코드를 호출하는 데 사용됩니다.

public class SoapClientActivity extends Activity { 
     @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     TextView tv = (TextView) findViewById(R.id.myText); 
     String soapResponse=""; 
     final String METHOD_NAME = "getArrval"; 
     final String SOAP_ACTION = "http://www.naturallyIrrational.com/naturallyIrrationalsoapserver.wsdl"; 
     final String NAMESPACE = "http://www.naturallyIrrational.com"; 

*이 다음 라인은 정확하고 를 표시해야한다 http://www.naturallyIrrational.com/naturallyIrrationalsoapserver.php *

 final String URL = "http://www.naturallyIrrational.com/naturallyIrrationalsoapserver.wsdl"; 

     if (InternetStatus.getInstance(this).isOnline(this)) { 

      try{        
       SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 


        PropertyInfo pi = new PropertyInfo(); 
      pi.setName("valname"); 
      pi.setValue("rt2"); 
      pi.setType(String.class); 
      request.addProperty(pi);  

       SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
        envelope.dotNet=false; 
        envelope.setOutputSoapObject(request); 
        HttpTransportSE andHttpTransport = new HttpTransportSE(URL); 
        andHttpTransport.debug = true; 
        andHttpTransport.call(SOAP_ACTION, envelope); 

*이이 값을 반환 뭔가 잘못, 그것은 수신 된입니다 만 통과 할 때 오류가 발생합니다 ksoap에서 돌아 가기 *

내가 바보 같은 일을하고 있고 어떤 사람이 그것을 지적 할 수 있다면 그것을 고맙게 생각할 것입니다.

PHP처럼 Android에서 wsdl을 캐시하고 다시 사용하지 않도록하는 지시문이 있습니까?

어쩌면 net beans를 사용하면 다음에 시간이 생길 때가 있습니다. 중간에 도움을 청할 수있는 사람이 있다면 주저없이 제안하십시오.

<?php 
class naturallyIrrational { 
    private $arrval = array("pi" => 3.1415,"e" => 2.7183, "rt2" => 1.414, "phi" => 1.618); 
    function getIrrationalvalue($valname) { 
$myFile = "logFile.html"; 
$fh = fopen($myFile, 'a') or die("can't open file"); 
$datq = date('m/d/Y h:i:s a', time()); 
fwrite($fh, $datq); 
if (isset($this->arrval[$valname])) { 

$stringData = " ".$valname." = ".$this->arrval[$valname]."<br/>"; 
fwrite($fh, $stringData); 
fclose($fh);  
return $this->arrval[$valname]; 
    } else { 
    throw new SoapFault("Server","Unknown Symbol '$valname'."); 
    } 
    } 
} 
$server = new SoapServer("naturallyIrrational.wsdl"); 
$server->setClass("naturallyIrrational"); 
$server->handle(); 
+0

WSDL이 지정됩니다. http://www.w3.org/TR/wsdl – hakre

+0

웹 서비스 작성/사용과 관련하여, 현재의 견해는 "SOAP 이외"입니다. SOAP은 "심각하게 이상 건축 프로토콜"의 약자입니다. 그것은 설정하는 것이 고통 스럽습니다, 천천히, 그것은 부서지기 쉬운 경향이 있습니다. 더 많은 대안이 있습니다. 선택의 여지가있는 경우 SOAP을 덤프하고 나머지, JSON 또는 절약 명함으로 이동하십시오. – SDC

+0

의견을 보내 주셔서 감사 드리며, 또한 Restful JSON 솔루션을 살펴 보겠습니다. 존중과 함께 여기에 내 질문은 특히 SOAP 작동에 관한 것입니다. 내가 만들고있는 WSDL이 정확하다는 것을 확신하고 싶습니다. 바로 가기가 없다면 WSDL 사양 (링크 hakra에 대한 감사)을 통해 작업하겠습니다. NET 비누 툴킷이 유틸리티를 사용하여 WSDL을 자동으로 생성하는 것과 같이 나를 도울 수있는 방법이 있습니다. – Kickaha

답변

3

URL 문자열이 공용 PHP를 가리켜 야 함을 발견했습니다.

final String URL = "http://www.naturallyIrrational.com/naturallyIrrationalsoapserver.php";

실제로 3 주 후에 결국 아주 간단한 것입니다. 소스 코드를 다운로드하는 것이 필수적이었습니다. 서비스가 작동하는 것을 볼 수 있었기 때문입니다.매개 변수를 전달하는 것과 관련하여 또 다른 문제가 있습니다. 예 :

PropertyInfo pi = new PropertyInfo(); 
pi.setName("valname"); 
pi.setValue("rt2"); 
pi.setType(String.class); 

하지만 다른 질문입니다.

의견을 보내 주셔서 감사합니다.

3

나는 Restful 웹 서비스를 재개발했다. SOAP 이외의 웹 서비스를 개발하는 데는 많은 이유가있었습니다. 나는 큰 그림을 얻기 위해 SOAP에 대한 아주 작은 프로젝트를 수행했다. 두 모델을 모두 개발하려면 Netbeans IDE가 매우 편리합니다. 읽기 Web Services Learning Trail

그 링크는 매우 쉬운 방법으로 휴식과 SOAP/WDSL 웹 서비스 개발을 모두 포함합니다 ... 희망이 도움이 될 것입니다.

+1

그 링크를 주셔서 감사합니다, 나는 넷빈이 아닌 이클립스를 사용 해왔고 그것을 시도 할 것입니다. 또한 편안한 해결책이 더 좋은 방법 일 수 있다는 제안을받습니다. 하지만 먼저 너를 좋아한다. 큰 그림을 얻고 싶다. SOAP/WSDL을 작동시키지 못하는 것은 내가 Restful 접근 방식으로 이동하기 위해 사용하려는 이유가 아닙니다. – Kickaha

관련 문제