Hi Demitris,
Sorry for this late response,
I'm not sure if there is a 'ready to use' parser to extract information out
of SOAP message. But I guess Axis2 have it.
Extracting information from soap message is quite complex.
There are several ways to get those information (eg: operations, to,
replyto):
1. If you use older SOAP version (1.1) and HTTP transport - operation name
is defined as HTTP attribute (Could not remember the name, "Action" or
"Operation")
2. In SOAP (1.2) and HTTP transport there is also an extra HTTP attribute
(not sure where, you can check by capturing using tcpmon)
3. This is more difficult, if your soap use WS_Addressing standard, you may
read the SOAP header and look for wsa:Action element value.
Example of SOAP with WS-Addressing header. (see <wsa:Action element)
<wsa:To
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
soapenv:mustUnderstand="1"
wsu:Id="Id-13283276">http://localhost:8888/axis2/services/CalculatorService?wsdl</wsa:To>
<wsa:ReplyTo
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
soapenv:mustUnderstand="1" wsu:Id="Id-14395294">
<wsa:Address>http://www.w3.org/2005/08/addressing/anonymous</wsa:Address>
</wsa:ReplyTo>
<wsa:MessageID
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
soapenv:mustUnderstand="1"
wsu:Id="Id-14264518">urn:uuid:0E4DF98317F35D31DE1179281210189</wsa:MessageID>
<wsa:Action
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
soapenv:mustUnderstand="1"
wsu:Id="Id-14123379">urn:Divide</wsa:Action> </soapenv:Header>
I hope this will help. :)
Regards,
Sukma
On Feb 19, 2008 11:46 AM, Demetris G <[EMAIL PROTECTED]> wrote:
>
> Hey Sukma,
>
> the code below worked fine - I can get the operations out of the
> WSDL. Is there
> a similar parser for identifying and extracting the methods out of
> outgoing (from the
> stubs) SOAP messages? I capture the SOAP message and I can parse it
> manually
> but is there a standard way (like the code below) for identifying the
> methods the
> SOAP message is destined to?
>
> Thanks much once again
>
> Sukma Agung Verdianto wrote:
> > Hi Demetris,
> >
> > You can try to use wsdl4j (http://sourceforge.net/projects/wsdl4j) to
> > get the operations of specified wsdl file. (AFAIK, Axis2 uses this in
> > their wsdl2java code)
> >
> > public static void main(String[] args) throws Exception {
> >
> > WSDLFactory fac = WSDLFactoryImpl.newInstance();
> >
> > WSDLReader reader = fac.newWSDLReader();
> >
> > Definition def =
> > reader.readWSDL("http://api.google.com/GoogleSearch.wsdl");
> >
> > Map services = def.getServices();
> >
> > for(Object serviceKey : services.keySet()) {
> >
> > QName serviceQName = (QName) serviceKey;
> >
> > Service service = (Service) services.get(serviceQName);
> >
> > System.out.println("Namespace: " +
> > service.getQName().getNamespaceURI() + ", Service Name: " +
> > service.getQName().getLocalPart());
> >
> > Map ports = service.getPorts();
> >
> > for(Object portKey : ports.keySet()) {
> >
> > String portName = (String) portKey;
> >
> > Port port = (Port) ports.get(portName);
> >
> > System.out.println(" Namespace: " +
> > port.getBinding().getQName().getNamespaceURI() + ", Binding Name: " +
> > port.getBinding().getQName().getLocalPart());
> >
> > List operations = port.getBinding().getBindingOperations();
> >
> > for(Object operation : operations) {
> >
> > BindingOperation op = (BindingOperation) operation;
> >
> > System.out.print(" Operation Name: " + op.getName());
> >
> > List ll = op.getExtensibilityElements();
> >
> > for(Object soap : ll) {
> >
> > if(SOAPOperation.class.isInstance(soap)) {
> >
> > System.out.print(" (" + ((SOAPOperation)soap).getSoapActionURI() + ")");
> >
> > }
> >
> > }
> >
> > System.out.println();
> >
> > }
> >
> > }
> >
> > }
> >
> > }
> >
> >
> > Above code read remote wsdl, and extract its information.
> >
> > Regards,
> > Sukma
> >
> > On Feb 17, 2008 2:09 PM, Demetris G <[EMAIL PROTECTED]
> > <mailto:[EMAIL PROTECTED]>> wrote:
> >
> >
> > Hi all,
> >
> > I am trying to use the wsdlParser from the Axis API to parse
> > the methods
> > out of an incoming WSDL file - does anyone who has used this
> > before have
> > any info on how to use this tool? OR any other way I could get the
> > operations
> > of the remote service out of the WSDL file? I would appreciate it.
> >
> > Thanks
> >
> >
> >
> ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > <mailto:[EMAIL PROTECTED]>
> > For additional commands, e-mail: [EMAIL PROTECTED]
> > <mailto:[EMAIL PROTECTED]>
> >
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>