I am trying to send the attachment . Currently I am using the CXF webservice which supports MTOM format but I need to send the attachment in DIME .
Please refer the code snippet:-
Works fine:
USDWebService ss = new USDWebService(wsdlURL, SERVICE_NAME);
USDWebServiceSoap port = ss.getUSDWebServiceSoap();
The problem Area this is the code given by my client to interact with their system :
((org.apache.axis.client.Stub)port)._setProperty(Call.ATTACHMENT_ENCAPSULATION_FORMAT,
Call.ATTACHMENT_ENCAPSULATION_FORMAT_DIME);
((org.apache.axis.client.Stub) port).addAttachment(dhandler);
The above code snippet dosent work as CXF webservice dosent support org.apache.axis.client.Stub so how do I send my attachment through CXF.
DIME has long since bean deprecated. CXF does not support DIME, just MTOM. If you need to do DIME, you'll need to use something other than CXF.
Related
This is critical to my current project. I have written a client in C++ using Windows web services. This client talks to the Clickatell SMS SOAP web service. I have tested the request using the SOAPUI tool and get correct response. I also receive the SMS message. Now, when I do this programmatically it fails because the WsCall() [in the code generated from WSDL via wsutil.exe) inserts even though the SOAP request I have already includes Envelope and Body. I cannot take out my Envelope since I have namespace specified in it like this:
http://schemas.xmlsoap.org/soap/encoding/\" xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:tns=\"soap.clickatell.com\">
I know that the additional Envelope and Body are inserted since I see it in the Fiddler tool.
Any help I can get is highly appreciated!
Looks like you are using the older type rpc/encoded soap api.
Have you tried using the document/literal service?
(http://api.clickatell.com/soap/document_literal/webservice.php?wsdl)
I am new to Spring web services. I am going to create an xml request, and send it as a SOAP request to a web service and receive the response.I read different documents but still confused as I could not find a working sample yet.
I know that I should use WebServiceTemplate and WebServiceMessageSender, SaajSoapmessageFactory (please let me know if I am wrong) but not sure how to use them.
Do I need WSDL? if yes why?
If you have any sample code please send me to get clear on it.
Thanks
If you want to send SOAP requests, you would like to be a SOAP client. Seems like you want to use spring-ws project. Check out their great documentation on the client side. The same documentation will guide you through the process of creating a server. There are plenty of examples and ready-made configuration snippets waiting for you.
Spring-WS is built on top of XML Schema description of your message, so you will need WSDL to generate e.g. JAXB models of your requests and responses.
AFAIK, for "web services" , the WSDL file is the machine blueprint of the "ports" as they are called However! ports in WSDL "means" java language(or any other programming language used with a routine or sub or procedure or function) method and has a specific naming scheme associate the .wsdl xml file(template of the service). Each WSDL port(language method) has specifications of return value and data specifications for how to feed it arguments and their type values.
How to write a gsoap restful C++/Solaris client, which should send a document(xsd__base64Binary) to webservice using streaming?
We tried writing a gsoap restful client without streaming and it is working fine. We generated a request xml (serialization- soap_begin_send(--), soap_serialize(--), soap_put(--),soap_end_send(--)) using gsoap and then used soap_post_connect(---), soap_send(---),soap_end_send(---) to send the request.
We used MTOM for streaming in gsoap client and working fine.
Is it possible to stream a document in gsoap restful client? Can we use MTOM in restful case?
If yes, could you please let us know, what are all the gsoap functions I should use for serialization and then to send that xml request?
And also, please share if you have any sample code.
One way is take doc as string and send that string as arguments to server.
soapcpp2 will generate code for client/server for you.
See here for more details.
I agree with this but if you have document which is huge size than you can devide it in part. Create your own header-data combination and devide document in packet and send as string.
I have implemented a Spring WS using XWSS for security. I have added a security configuration policy file into my application.
<xwss:SecurityConfiguration xmlns:xwss="http://java.sun.com/xml/ns/xwss/config"
dumpMessages="true">
<xwss:RequireTimestamp
id="tsp"
maxClockSkew="60"
timestampFreshnessLimit="300">
</xwss:RequireTimestamp>
<xwss:RequireUsernameToken
id="token"
passwordDigestRequired="false"
nonceRequired="false"/>
<xwss:Timestamp></xwss:Timestamp>
<xwss:UsernameToken
name="service"
password="service"
id="uToken"
digestPassword="true"
useNonce="true"/>
</xwss:SecurityConfiguration>
Now I am developing a client to access the WS. The security works fine. But I am unable to test the SUCCESS case in which the client can successfully get a response from my service. The problem is I don't know how to make my client send the usernametoken and timestamp along with the request. I am using NetBeans IDE and I am implementing a JAX-WS client to access the Spring WS using this tutorial.
Please let me know what needs to be done.
For Spring WSS there is not much difference between adding a security header to the ingoing soap messages or to the outgoing ones. The process is very similar.
In both cases, you should create a interceptor for adding the security header. It is described here. So, if you create the WS client using Spring you should not have problems, especially if you have already developed the server side, but the tutorial you referenced doesn't look like using Spring for implementing the client.
You can do this by adding the following code in you client class / class extending the webservicetgatewaysupport.
SoapHeader header = msg.getSoapHeader();
StringSource headerSource = new StringSource("<wsse:Security xmlns:wsse=\"http://docs.oasis-
open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd\" mustUnderstand=\"1\"> <wsse:UsernameToken>
<wsse:Username>"+userName+"</wsse:Username> <wsse:Password Type=\"http://docs.oasis-open.org/wss/2004/01/
oasis-200401-wss-username-token-profile-1.0#PasswordText\">"+password+"</wsse:Password> </wsse:UsernameToken>"
+"</wsse:Security>");
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.transform(headerSource, header.getResult());
The above has to go in the message call back handler of the marshalSendANDRecieve metho of the webserviceTemplate
Check this sample for client.
And you could use SoapUI to test your server. Import WSDL, then select any request and open "Properties" window in left-bottom corner. You would see "Username", "Password" and "WSS-Password Type" related settings.
I'm quite new to webservices, recently started implementing Soap Webservice using Spring-WS and client using Axis and Spring. As i understood, we send xml as request for webservice and we get back response xml. These request/response Xmls can then be marshalled/unmarshalled.
Is there a way to directly return a pojo from webservice and get it on client side with out xml marshall/unmarshalling?
We always end up using Apache Axis and using WSDL2JAVA which produces pojo's for you and hides the service implementation. For the marshaling you can use something like XMLBeans to easily marshal between xml and pojos.
Also see Spring WS Client - How to create mapping POJO for WSDLs without using Axis
Short answer : no.