2013-01-05 3 views
3

하나의 BPEL 프로세스가 있습니다. 그리고 나는 그것을 안드로이드로 부르고 싶다. 하지만 wsdl url, 네임 스페이스 및 메서드 이름을 이해할 수 없습니다. 왜냐하면 그 때문에 오류가 발생한다는 것을 알고 있기 때문입니다. 나는 wsdl 파일과 xsd 파일을 보내고있다.android에서 bpel 프로세스 호출

내 BPEL 프로세스 WSDL 파일은 다음과 같습니다

<definitions name="HelloWorld" targetNamespace="http://xmlns.oracle.com/HelloWorld" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://xmlns.oracle.com/HelloWorld" xmlns:plnk="http://schemas.xmlsoap.org/ws/2003/05/partner-link/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:client="http://xmlns.oracle.com/HelloWorld"> 
    <types> 
     <schema xmlns="http://www.w3.org/2001/XMLSchema"> 
      <import namespace="http://xmlns.oracle.com/HelloWorld" schemaLocation="HelloWorld.xsd"/> 
     </schema> 
    </types> 
    <message name="HelloWorldRequestMessage"> 
     <part name="payload" element="tns:HelloWorldProcessRequest"/> 
    </message> 
    <message name="HelloWorldResponseMessage"> 
     <part name="payload" element="tns:HelloWorldProcessResponse"/> 
    </message> 
    <portType name="HelloWorld"> 
     <operation name="process"> 
      <input message="tns:HelloWorldRequestMessage"/> 
      <output message="tns:HelloWorldResponseMessage"/> 
     </operation> 
    </portType> 
    <binding name="HelloWorldBinding" type="tns:HelloWorld"> 
     <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> 
     <operation name="process"> 
      <soap:operation style="document" soapAction="process"/> 
      <input> 
       <soap:body use="literal"/> 
      </input> 
      <output> 
       <soap:body use="literal"/> 
      </output> 
     </operation> 
    </binding> 
    <service name="HelloWorld"> 
     <port name="HelloWorldPort" binding="tns:HelloWorldBinding"> 
      <soap:address location="http://www.sample.com/orabpel/default/HelloWorld/1.0"/> 
     </port> 
    </service> 
    <plnk:partnerLinkType name="HelloWorld"> 
    <plnk:role name="HelloWorldProvider"> 
     <plnk:portType name="tns:HelloWorld"/> 
    </plnk:role> 
    </plnk:partnerLinkType> 
</definitions> 

내 XSD 파일은 다음과 같습니다

<schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://xmlns.oracle.com/HelloWorld" xmlns="http://www.w3.org/2001/XMLSchema"> 
    <element name="HelloWorldProcessRequest"> 
     <complexType> 
      <sequence> 
       <element name="input" type="string"/> 
      </sequence> 
     </complexType> 
    </element> 
    <element name="HelloWorldProcessResponse"> 
     <complexType> 
      <sequence> 
       <element name="result" type="string"/> 
      </sequence> 
     </complexType> 
    </element> 
</schema> 

내 안드로이드 코드는 : 나는 다음있어

import org.ksoap2.SoapEnvelope; 
    import org.ksoap2.serialization.PropertyInfo; 
    import org.ksoap2.serialization.SoapObject; 
    import org.ksoap2.serialization.SoapPrimitive; 
    import org.ksoap2.serialization.SoapSerializationEnvelope; 
    import org.ksoap2.transport.HttpTransportSE; 

    import android.R.string; 
    import android.app.Activity; 
    import android.os.Bundle; 
    import android.util.Log; 
    import android.view.View; 
    import android.view.View.OnClickListener; 
    import android.widget.Button; 
    public class SOAP_WebService extends Activity 
    { 
     private final String NAMESPACE = "http://xmlns.oracle.com/HelloWorld"; 
     private final String URL = "http://http://www.sample.com/orabpel/default/HelloWorld/1.0"; 
     private final String SOAP_ACTION = "http://xmlns.oracle.com/HelloWorld/process"; 
     private final String METHOD_NAME = "process"; 

    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.soap_webservice); 

     Button btnClick = (Button) findViewById(R.id.btnClick); 
     btnClick.setOnClickListener(new OnClickListener() 
     { 
      @Override 
      public void onClick(View v) 
      { 
       callWebservice(); 
      } 
     }); 
    } 
    public void callWebservice() 
    { 
     SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 
     PropertyInfo weightProp =new PropertyInfo(); 
     weightProp.setName("input"); 
     weightProp.setValue("sample"); 
     weightProp.setType(string.class); 
     request.addProperty(weightProp); 



     SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 

     envelope.dotNet = false; 
     envelope.bodyOut = request; 
     envelope.setOutputSoapObject(request); 
     HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); 
     try 
     { 
      androidHttpTransport.call(SOAP_ACTION, envelope); 
      SoapPrimitive response = (SoapPrimitive)envelope.getResponse(); 
      SoapObject obj1 = (SoapObject)envelope.bodyIn; 
      Log.i("myApp", response.toString()); 

     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
      Log.d("Exception Generated", ""+e.getMessage()); 
     } 

    } 

} 

오류 :

01-06 00:32:39.572: W/System.err(317): SoapFault - faultcode: 'null:HelloWorld' faultstring: 'Cannot figure out operation name. Bad SOAPAction or wsa:Action.' faultactor: 'http://xmlns.oracle.com/HelloWorld/process' detail: null 01-06 
00:32:39.572: W/System.err(317): at org.ksoap2.serialization.SoapSerializationEnvelope.parseBody(SoapSerializationEnvelope.java:141) 
01-06 00:32:39.572: W/System.err(317): at org.ksoap2.SoapEnvelope.parse(SoapEnvelope.java:140) 01-06 
00:32:39.582: W/System.err(317): at org.ksoap2.transport.Transport.parseResponse(Transport.java:100) 01-06 
00:32:39.582: W/System.err(317): at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:197) 
01-06 00:32:39.582: W/System.err(317): at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:95) 
01-06 00:32:39.582: W/System.err(317): at com.mehul.Web_Service.SOAP_WebService.callWebservice(SOAP_WebService.java:69) 
01-06 00:32:39.582: W/System.err(317): at com.mehul.Web_Service.SOAP_WebService$1.onClick(SOAP_WebService.java:40) 
01-06 00:32:39.582: W/System.err(317): at android.view.View.performClick(View.java:2408) 01-06 00:32:39.582: 
W/System.err(317): at android.view.View$PerformClick.run(View.java:8816) 01-06 00:32:39.582: 
W/System.err(317): at android.os.Handler.handleCallback(Handler.java:587) 01-06 
00:32:39.582: W/System.err(317): at android.os.Handler.dispatchMessage(Handler.java:92) 01-06 
00:32:39.592: W/System.err(317): at android.os.Looper.loop(Looper.java:123) 01-06 00:32:39.592: 
W/System.err(317): at android.app.ActivityThread.main(ActivityThread.java:4627) 01-06 
00:32:39.592: W/System.err(317): at java.lang.reflect.Method.invokeNative(Native Method) 01-06 
00:32:39.592: W/System.err(317): at java.lang.reflect.Method.invoke(Method.java:521) 01-06 00:32:39.592: 
W/System.err(317): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
01-06 00:32:39.592: W/System.err(317): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 01-06 
00:32:39.592: W/System.err(317): at dalvik.system.NativeStart.main(Native Method) 01-06 00:32:39.592: D/Exception Generated(317): Cannot figure out operation name. Bad 
SOAPAction or wsa:Action. 

답변

1

위의 Java 코드에서 soapAction에 지정된 값이 잘못되었습니다. 개인 최종 문자열 SOAP_ACTION = "process";

wsdl에서 soapAction을 확인하십시오.