You are viewing a plain text version of this content. The canonical link for it is here.
Posted to c-user@axis.apache.org by Krankurs Leonid <lk...@ford.com> on 2006/09/01 23:01:41 UTC

Axis C++ client, Call->invoke

I have the following scenario (WSDL, message) for Axis C++ client

WSDL, defines the service with a method "evaluate"


<?xml version="1.0" encoding="utf-16"?>
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:pds="http://pdservice.services.aps.some.com/"
xmlns:xsd1="http://aps.some.com/to/context" name="PolicyDecisionService"
targetNamespace="http://pdservice.services.aps.some.com/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
  <wsdl:types>
    <xsd:schema>
      <xsd:import schemaLocation="cs-xacml-schema-context-01.xsd"
namespace="http://aps.some.com/to/context" />
    </xsd:schema>
  </wsdl:types>
  <wsdl:message name="EvaluationRequest">
    <wsdl:part name="request" element="xsd1:Request" />
  </wsdl:message>
  <wsdl:message name="EvaluationResponse">
    <wsdl:part name="response" element="xsd1:Response" />
  </wsdl:message>
  <wsdl:portType name="PolicyDecison">
    <wsdl:operation name="evaluate">
      <wsdl:input message="pds:EvaluationRequest" />
      <wsdl:output message="pds:EvaluationResponse" />
    </wsdl:operation>
  </wsdl:portType>
  <wsdl:binding name="PolicyDecisionSOAP" type="pds:PolicyDecison">
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" />
    <wsdl:operation name="evaluate">
      <soap:operation
soapAction="http://pdservice.services.aps.some.com/PolicyDecisionService/evaluate"
/>
      <wsdl:input>
        <soap:body use="literal" />
      </wsdl:input>
      <wsdl:output>
        <soap:body use="literal" />
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>
  <wsdl:service name="PolicyDecisionService">
    <wsdl:port name="PolicyDecision" binding="pds:PolicyDecisionSOAP">
      <soap:address
location="http://wwwdev.apspdp.some.com:80/ApsPdpEARWeb/services/PolicyDecision"
/>
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>


Message to be sent  

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <soapenv:Body>
    <Request xmlns="http://aps.some.com/to/context">
      <Subject
SubjectCategory="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject"
xmlns="">
        <Attribute
AttributeId="urn:oasis:names:tc:xacml:1.0:subject:subject-id"
DataType="urn:oasis:names:tc:xacml:1.0:data-type:rfc822Name" xmlns="">
          <AttributeValue xmlns="">$arathod4@some.com</AttributeValue>
        </Attribute>
        <Attribute AttributeId="attribute"
DataType="http://www.w3.org/2001/XMLSchema#string" xmlns="">
          <AttributeValue xmlns="">attribute</AttributeValue>
        </Attribute>
      </Subject>
      <Resource xmlns="">
        <Attribute
AttributeId="urn:oasis:names:tc:xacml:1.0:resource:resource-id"
DataType="http://www.w3.org/2001/XMLSchema#anyURI" xmlns="">
           <AttributeValue xmlns="">APSUI:DefinePolicy</AttributeValue>
        </Attribute>
        <Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:resource:scope"
DataType="http://www.w3.org/2001/XMLSchema#string" xmlns="">
           <AttributeValue xmlns="">Immediate</AttributeValue>
        </Attribute>
      </Resource>
      <Action xmlns="">
        <Attribute
AttributeId="urn:oasis:names:tc:xacml:1.0:action:action-id"
DataType="http://www.w3.org/2001/XMLSchema#string" xmlns="">
           <AttributeValue xmlns="">update</AttributeValue>
        </Attribute>
      </Action>
    </Request>
  </soapenv:Body>
</soapenv:Envelope>

and message itself have no "info" about method "evaluate"

i use .Net Web service Studio 2.0 for test message flow - message goes out
and comes in - the service recognizes the message and responces as expected.


in the my Axis C++ scenario i have pre-seialized object to <Request>  ...
</Request>.
i have a problem to make it work (send a message) by use of Call class 

	m_pCall = new Call ();
	m_pCall->setEndpointURI
("http://wwwdev.apspdp.some.com/ApsPdpEARWeb/services/PolicyDecision/");

	m_pCall->setTransportProperty (SOAPACTION_HEADER,
"PolicyDecision#evaluate"); 
	m_pCall->setSOAPVersion (SOAP_VER_1_1);

(1)	m_pCall->setOperation ("evaluate",
"http://wwwdev.apspdp.some.com/ApsPdpEARWeb/services/PolicyDecision/");
	
	AnyType* pAny = new AnyType();
	AnyType* any;
	pAny->_size = 1;
	pAny->_array = new char*[1];
	pAny->_array[0] = strdup(request.c_str());  // "request" keeps serialized
object <Request> ....</Request>
	m_pCall->addAnyObject(pAny);

	if ( AXIS_SUCCESS == m_pCall->invoke () )
		....

it throws exception, the trace:

01/09/2006 16:37:49:943 Eastern Daylight Time] 3240 HTTPChannel > operator<<
@00338670,------------>
[01/09/2006 16:37:49:943 Eastern Daylight Time] 3240 - I "POST
/ApsPdpEARWeb/services/PolicyDecision/ HTTP/1.1

[01/09/2006 16:37:49:943 Eastern Daylight Time] 3240 - I Host:
wwwdev.apspdp.some.com:80

[01/09/2006 16:37:49:943 Eastern Daylight Time] 3240 - I Content-Type:
text/xml; charset=UTF-8

[01/09/2006 16:37:49:943 Eastern Daylight Time] 3240 - I SOAPAction:
"PolicyDecision#evaluate"

[01/09/2006 16:37:49:943 Eastern Daylight Time] 3240 - I Content-Length:
nnnn

[01/09/2006 16:37:49:943 Eastern Daylight Time] 3240 - I 

[01/09/2006 16:37:49:943 Eastern Daylight Time] 3240 - I "
[01/09/2006 16:37:49:943 Eastern Daylight Time] 3240 HTTPChannel <
operator<< @00338670,[60613A00] <`a:.>
[01/09/2006 16:37:49:943 Eastern Daylight Time] 3240 HTTPChannel >
operator<< @00338670,------------>
[01/09/2006 16:37:49:943 Eastern Daylight Time] 3240 - I "<?xml
version='1.0' encoding='utf-8' ?>
[01/09/2006 16:37:49:943 Eastern Daylight Time] 3240 - I <SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
[01/09/2006 16:37:49:943 Eastern Daylight Time] 3240 - I <SOAP-ENV:Body>
[01/09/2006 16:37:49:943 Eastern Daylight Time] 3240 - I <ns1:evaluate
xmlns:ns1="http://wwwdev.apspdp.some.com/ApsPdpEARWeb/services/PolicyDecision/">
[01/09/2006 16:37:49:943 Eastern Daylight Time] 3240 - I <Request
xmlns="http://aps.some.com/to/context"><Subject
SubjectCategory="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject"
xmlns=""><Attribute
AttributeId="urn:oasis:names:tc:xacml:1.0:subject:subject-id"
DataType="urn:oasis:names:tc:xacml:1.0:data-type:rfc822Name"
xmlns=""><AttributeValue
xmlns="">$rrrrrr4@some.com</AttributeValue></Attribute><Attribute
AttributeId="attribute" DataType="http://www.w3.org/2001/XMLSchema#string"
xmlns=""><AttributeValue
xmlns="">attribute</AttributeValue></Attribute></Subject><Resource
xmlns=""><Attribute
AttributeId="urn:oasis:names:tc:xacml:1.0:resource:resource-id"
DataType="http://www.w3.org/2001/XMLSchema#anyURI" xmlns=""><AttributeValue
xmlns="">APSUI:DefinePolicy</AttributeValue></Attribute><Attribute
AttributeId="urn:oasis:names:tc:xacml:1.0:resource:scope"
DataType="http://www.w3.org/2001/XMLSchema#string" xmlns=""><AttributeValue
xmlns="">Immediate</AttributeValue></Attribute></Resource><Action
xmlns=""><Attribute
AttributeId="urn:oasis:names:tc:xacml:1.0:action:action-id"
DataType="http://www.w3.org/2001/XMLSchema#string" xmlns=""><AttributeValue
xmlns="">update</AttributeValue></Attribute></Action></Request></ns1:evaluate>
[01/09/2006 16:37:49:943 Eastern Daylight Time] 3240 - I </SOAP-ENV:Body>
[01/09/2006 16:37:49:943 Eastern Daylight Time] 3240 - I
</SOAP-ENV:Envelope>


.................................

[01/09/2006 16:37:49:953 Eastern Daylight Time] 3240 - I 51, "
[01/09/2006 16:37:49:953 Eastern Daylight Time] 3240 - I  Server sent HTTP
error: 'Not Found'
[01/09/2006 16:37:49:953 Eastern Daylight Time] 3240 - I "
[01/09/2006 16:37:49:953 Eastern Daylight Time] 3240 HTTPTransportException
> getMessageForExceptionCode @0012F590,51
[01/09/2006 16:37:49:953 Eastern Daylight Time] 3240 HTTPTransportException
< getMessageForExceptionCode @0012F590,"HTTPTransportException:HTTP
transport error"
[01/09/2006 16:37:49:953 Eastern Daylight Time] 3240 HTTPTransportException
> getMessageForExceptionCode @0012F590,51
[01/09/2006 16:37:49:953 Eastern Daylight Time] 3240 HTTPTransportException
< getMessageForExceptionCode @0012F590,"HTTPTransportException:HTTP
transport error"
[01/09/2006 16:37:49:953 Eastern Daylight Time] 3240 HTTPTransportException
< HTTPTransportException @0012F590
[01/09/2006 16:37:49:953 Eastern Daylight Time] 3240 ClientAxisEngine X
process @00570090,------------>
[01/09/2006 16:37:49:953 Eastern Daylight Time] 3240 - I caught
AxisException(3, "HTTPTransportException:HTTP transport error 
[01/09/2006 16:37:49:953 Eastern Daylight Time] 3240 - I  Server sent HTTP
error: 'Not Found'
[01/09/2006 16:37:49:953 Eastern Daylight Time] 3240 - I ")
[01/09/2006 16:37:49:953 Eastern Daylight Time] 3240 AxisGenException >
AxisGenException @0012F99C,------------>
[01/09/2006 16:37:49:953 Eastern Daylight Time] 3240 - I 51,
"HTTPTransportException:HTTP transport error 
[01/09/2006 16:37:49:953 Eastern Daylight Time] 3240 - I  Server sent HTTP
error: 'Not Found'
[01/09/2006 16:37:49:953 Eastern Daylight Time] 3240 - I "


looks like 

<ns1:evaluate
xmlns:ns1="http://wwwdev.apspdp.some.com/ApsPdpEARWeb/services/PolicyDecision/">
</ns1:evaluate>

that inserted by engine breakes message structure. When the call (1)
m_pCall->setOperation is ommited 
the body has not even created.


What is wrong? 
Is the call m_pCall->setOperation(...) mandatory? 

What is the proper way to use m_pCall->invoke() in the scenario (WSDL,
message) above?
If m_pCall->invoke() is not applicable, what is the best way for this case
(WSDL, message)

Please Help

Regards,
-- 
View this message in context: http://www.nabble.com/Axis-C%2B%2B-client%2C-Call-%3Einvoke-tf2204816.html#a6106167
Sent from the Axis - C++ - User forum at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: axis-c-user-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-c-user-help@ws.apache.org