Soap Router versus Web Service Servlet
Hello:
I am trying to understand the fundamental difference between a SOAP Router versus
Web Service Servlet?. In websphere there is a concept called WSG(Web Service
Gateway) on which we can configure an handler to intercept the incoming soap requests.
But in weblogic I do not think we can configure any handler on Web Service Servlet.
So I think for this very purpose you have this soap router right ?. If this is
correct then does the soap router will forward the call to the Web Service Servlet
which implements the soap engine.
Please clarify,
Thanks,
Vijay
Hello,
Right, today there is not a global handler that can be configured;
however you can do servlet filter or check out an early access SOAP
Router[1] from Manoj.
Could you give us a snapshot of your use case?
Thanks,
Bruce
[1]
http://manojc.com/?router/readme.html
Vijay Cherukumudi wrote:
>
Hello:
I am trying to understand the fundamental difference between a SOAP Router versus
Web Service Servlet?. In websphere there is a concept called WSG(Web Service
Gateway) on which we can configure an handler to intercept the incoming soap requests.
But in weblogic I do not think we can configure any handler on Web Service Servlet.
So I think for this very purpose you have this soap router right ?. If this is
correct then does the soap router will forward the call to the Web Service Servlet
which implements the soap engine.
Please clarify,
Thanks,
Vijay
Similar Messages
-
OWSM 10.1.3.4 and Non-SOAP XML-based web service
Hi all,
According to the OWSM 10.1.3.4 Administrator's Guide, "all Web services registered with an Oracle WSM Gateway are virtualized as both a SOAP and non-SOAP Web service." To access the non-SOAP (XML-only) web service, the documentation states "The non-SOAP virtualized URL can be determined from the virtualized SOAP URL by replacing the services keyword in the URL with the xml keyword."
For example, if the SOAP virtualized endpoint is:
http://host:port/gateway/services/SID0003001
then, the non-SOAP XML service endpoint is:
http://host:port/gateway/xml/SID0003001
I have several web services registered with an OWSM gateway, running on SOA Suite 10.1.3.4, and can access those without any problem. However, when I attempt to access the "/gateway/xml" version of these services, I simply get an HTTP 200 response header with a null body.
Does anyone have any ideas what could be causing this or what the secret is to get the non-SOAP XML service feature of OWSM to work?
Thanks!
--GaryHi all,
According to the OWSM 10.1.3.4 Administrator's Guide, "all Web services registered with an Oracle WSM Gateway are virtualized as both a SOAP and non-SOAP Web service." To access the non-SOAP (XML-only) web service, the documentation states "The non-SOAP virtualized URL can be determined from the virtualized SOAP URL by replacing the services keyword in the URL with the xml keyword."
For example, if the SOAP virtualized endpoint is:
http://host:port/gateway/services/SID0003001
then, the non-SOAP XML service endpoint is:
http://host:port/gateway/xml/SID0003001
I have several web services registered with an OWSM gateway, running on SOA Suite 10.1.3.4, and can access those without any problem. However, when I attempt to access the "/gateway/xml" version of these services, I simply get an HTTP 200 response header with a null body.
Does anyone have any ideas what could be causing this or what the secret is to get the non-SOAP XML service feature of OWSM to work?
Thanks!
--Gary -
Hi!
We need to implement authentication using our own methods, and the authentication
information is provided to the web service implementation in a basic authentication
header. The problem is, that the servlet
weblogic.webservice.server.servlet.WebServiceServlet, which handles web services
in
wls 7.0.sp2, always attempts to perform authentication, if the header is present.
Is there any way to circumvent this, because we want to implement authentication
on our own?
I already know two workarounds:
The best would of course be to implement a custom security realm for our own
authentication system. This is not an option, implementing an own security
realm is overkill for this specific web service.
The other way would be to route the requests by way of a custom servlet, which
would
remove the basic authentication header, and put the authentication info in custom
headers, such as x-auth: <user:password>, or smthng similar, and after successful
authentication, make a call to bea's servlet weblogic.webservice.server.servlet.WebServiceServlet.
But still, I'd like to know if there is any way to tell bea's servlet to ignore
the basic
authentication header?
Oh yeah, by the way, this is URGENT, as always. (really!! ;)
Toni NykanenCurrently there is no option to turn off security check.
I think you can use a servlet filter mapped to the URL
of your service, instead of a proxy servlet?
Regards,
-manoj
http://manojc.com
"Toni Nykanen" <[email protected]> wrote in message
news:3ef1577b$[email protected]..
>
Hi!
We need to implement authentication using our own methods, and theauthentication
information is provided to the web service implementation in a basicauthentication
header. The problem is, that the servlet
weblogic.webservice.server.servlet.WebServiceServlet, which handles webservices
in
wls 7.0.sp2, always attempts to perform authentication, if the header ispresent.
Is there any way to circumvent this, because we want to implementauthentication
on our own?
I already know two workarounds:
The best would of course be to implement a custom security realm for ourown
authentication system. This is not an option, implementing an own security
realm is overkill for this specific web service.
The other way would be to route the requests by way of a custom servlet,which
would
remove the basic authentication header, and put the authentication info incustom
headers, such as x-auth: <user:password>, or smthng similar, and aftersuccessful
authentication, make a call to bea's servletweblogic.webservice.server.servlet.WebServiceServlet.
>
But still, I'd like to know if there is any way to tell bea's servlet toignore
the basic
authentication header?
Oh yeah, by the way, this is URGENT, as always. (really!! ;)
Toni Nykanen -
Client triggers Web Service servlet
Hi,
I'm new to java enterprise app. I have to develop a web service which listens to incoming soap info and triggers a servlet to be displayed on the screen where the web service is installed. And the servlet must show the message received from soap. The problem is that I don't know how to trigger the servlet. Can anyone help me please? Thanks in advance!.
TobiasHi Martti,
I am looking for something similar , were you able to get this to work?
Also, how did you configure the identity assertion provider?
Any help would be appreciated
Thanks -
Web Services - Servlets vs EJBs
Hi,
Looking for any suggestions about the benefits of using either servlets or EJBs as web service endpoints. Very early in the design of any application, I wish to expose my business logic components as web services, is there any particular benefit to using a specific approach (i.e. using either EJBs or Servlets as the end points of the web services exposing the business logic)?
This is a totally new application so I have no considerations towards reusing old EJB code, etc. My initial thoughts favour using servlets, if only because it reduces the complexity / resources required for the application server (i.e only Web-container required, rather than Web & EJB container).
Any thoughts please?Why do Servlets not scale as well? Surely they are
more "lightweight" than an EJB (which has all theRMI
overhead), and wouldn't it ultimately be down tothe
underlying app server anyway?Right, but servlets are just HTTP request listeners.
They aren't components, they aren't transactional,
they don't handle persistence, they don't have
naming services, they don't have queuing services.
The EJB container offers you a lot.
With that said, it's not just a choice between
servlets and EJBs. You can use POJOs and avoid EJBs
altogether if you do it right.
Or choose the best of both worlds and mix 'n match as needed.
Noone forces you to choose one over the other (at least not for any technical reasons, I'm not diving into corporate politics here).
My thought was that web services were a better wayto
expose business logic than EJBs, but if there some
solid reason why this isn't the case I like toknow.
Web services - lightweight? Maybe that's true of
REST, but certainly not SOAP. There's an argument
that says services are more heavyweight than EJBs,
because all the XML on the wire is an expensive
protocol.
SOAP is heavy on the network, but it's essentially a rather thin layer on top of other services (if properly architected).
For example we have a SOAP layer exposing a Spring application which proxies an EJB architecture.
Next to that SOAP layer sits a traditional web application (servlets) which itself has a Spring application sitting on top of it for demonstration and testing purposes.
And then there's an SDK allowing direct access to the Spring layer (and thus almost direct access to the EJB layer).
That's the beauty of a true open architecture, each component can be built on top of another and the component underneath can function just fine without it.
Look into Spring:
http://www.springframework.org
It's a lighter alternative to EJBs, and good plumbing
for any Java EE app.While Spring can serve as an alternative for EJB in places where EJB are overkill it's of course not in competition with it.
Spring is a service layer, making use of other technologies (like EJB, like AOP, like ORM) to provide data and other services (like Struts, like JSF, like JSP) to provide that data to requesters. -
How to process SOAP attachment at web service??
Hi
I am implementing a web service to upload a file to server using SOAP message. How do I get to know that SOAP msg contains attachment and if so how to process it?
Please help.Hi Praveen,
Thanks for your help...
I am new to web services and I am running short of the time to implement the sample code...
Can you guide me to the step by step sample code for the same if you have one?
Any how the link seems to be usefulllllllllllll
thanks once againnnnn -
SOAP Sender Adapter + Web Service Security
Hi all
We have a SOAP scenario, where Multiple clients will expose a same webservice and got the response back.
While exposing a webservice calls its asking for credentails
(yes we can create the service user with proper authentication and provide the information to client)
But client dont want to use the credentials to expose a call. We are thinking to get the certificates from XI server (certificates are already installed) and give it to Client to by pass the credentials.
Since the multiple Client are calling the same service, its tedious to install all client certificates in XI.
Kindly suggest your any ideas on how to perform this.
Thanks
RamgHello!
Please refer to the three links below that may help you with using certificate in Web Services for Logon.
Defining the Logon Procedure:
http://help.sap.com/saphelp_nwpi71/helpdata/EN/d3/2bb3405226bc4ee10000000a1550b0/frameset.htm
Authentication for Web Services:
http://help.sap.com/saphelp_nwpi71/helpdata/EN/45/6bc1a021e80dece10000000a11466f/frameset.htm
Authentication for Web Services:
http://help.sap.com/saphelp_nwpi71/helpdata/EN/57/07813ee3d32b44e10000000a114084/frameset.htm
Regards,
Caio Cagnani -
Passing Soap Header in Web Service
Hi Team,
In our application, we have used web service through webservice proxy wizard using the WSDL file. Now due to security reasons we need to pass Soap Header in the webservice call. Can you please help on how to pass soap header in the webservice call ?
Please find the below webservice code/
Long ll_ret
edpmdata ll_ReturnVal
edpmreq lnv_Request_data
//filter lnv_filter
Datawindowchild dwc_child
str_pass l_str_pass
long l_l_row_count, l_l_row
String l_s_code, l_s_modify, l_l_ret
String str_proxy_name = "sohedpmservice"
String l_s_delivery_pref, l_s_email
String ls_url, l_s_ini_file
l_s_ini_file = g_nv_ini.fnv_get_name ()
ls_url = ProfileString(l_s_ini_file,"External", "EDPM_URL", "")
Soapconnection lsc_Conn
sohedpmservice lproxy_obj
lsc_Conn = create Soapconnection
SetPointer (Hourglass!)
Try
ll_ret = lsc_Conn.CreateInstance(lproxy_obj, str_proxy_name, ls_url)
Catch (SoapException e )
Error.fnv_error("0001", This, "ue_process_fields","Error Creating Instance","",FALSE,1,0)
Message.ReturnValue = -1
RETURN -1
end try
IF ll_ret <> 0 THEN
Error.fnv_error("0001", This, "ue_process_fields","Error Creating Instance","",FALSE,1,0)
Message.ReturnValue = -1
RETURN -1
END IF
Try
lnv_Request_data = create edpmreq
lnv_Request_data.value = l_s_party_key
ll_ReturnVal = lproxy_obj.getcommpref(lnv_Request_data)
If ll_ReturnVal.ws_serviceresult.resultcode = '5' Then
Error.fnv_error("0001", This, "ue_process_fields",String(ll_returnval.ws_serviceresult.ws_resultinfo) ,"Error Response ", FALSE, 1,0)
Message.ReturnValue = -1
RETURN -1
End if
l_s_delivery_pref = ll_ReturnVal.deliverymethod
l_s_email = ll_ReturnVal.emailaddr
i_str_pass.s[86] = l_s_delivery_pref
i_str_pass.s[87] = l_s_email
i_str_pass.s[88] = l_s_party_key
Catch ( SoapException a )
Error.fnv_error("0001", This, "ue_process_fields","Error Response","Error Response",FALSE,1,0)
Message.ReturnValue = -1
RETURN -1
end try
Destroy lsc_Conn
Return 1What version of PowerBuilder?
PB.Net or Classic?
Are you using the SOAP or .Net Engine (if using Classic)?
What kind of header?
There is limited support for passing custom headers in the .Net engine in Classic. The header would need to be defined in the WSDL for the service.
Anything beyond that (e.g., WS-Security) would need to be handled in a WCF client in PB.Net. -
How do pass the UserID and Password in the SOAP header for web services
I am encountering issues trying to pass the userid and password in the SOAP header when consuming a 3rd party web service. Rostewitz posted something similiar but I don't know how to type iv_xml. Any help would be greatly appreciated.
Thank you,
jpinaIt helps to post a link to a thread when you refer to it. If you are trying to implement that solution though, you can look at the parameter of the corresponding method being called. The parameter has type 'SIMPLE' which means that it is compatible with all of the predefined elementary ABAP types. In this case, you should use 'STRING'.
-
Web service, servlet, HttpServletResponse, Locale
Hello guys!
I have two questions:
- Can a servlet be a web service?
- For the next one, I supposed that yes... I'm trying to build a web service from a servlet and I get a strange error.
I simplified the code to the maximum, and it became like this:
public class PriceListServlet extends HttpServlet implements PriceListIF{
public void init() {
public void doPost(HttpServletResponse resp) {
}and the interface is:
public interface PriceListIF extends Remote {
public void init() throws RemoteException;
public void doPost(HttpServletResponse resp)throws RemoteException;
}Cannot be more simple, can it?
When I type ant build, I get the following error message:
erreur : La classe java.util.Locale n'a pas de constructeur vide accessible public
which means:
error: Class java.util.Locale doesn't have public empty constructor
I did a few tests, and if I put HttpServletRequest instead of HttpServletResponse, it works.
If the doPost method doesn't have any parameter, it works!
So there's a problem with HttpServletResponse...
Does anyone know what's Locale got to do with HttpServletResponse????
Thanks for your help
PhilippeHello guys!
I have two questions:
- Can a servlet be a web service?
- For the next one, I supposed that yes... I'm trying to build a web service from a servlet and I get a strange error.
I simplified the code to the maximum, and it became like this:
public class PriceListServlet extends HttpServlet implements PriceListIF{
public void init() {
public void doPost(HttpServletResponse resp) {
}and the interface is:
public interface PriceListIF extends Remote {
public void init() throws RemoteException;
public void doPost(HttpServletResponse resp)throws RemoteException;
}Cannot be more simple, can it?
When I type ant build, I get the following error message:
erreur : La classe java.util.Locale n'a pas de constructeur vide accessible public
which means:
error: Class java.util.Locale doesn't have public empty constructor
I did a few tests, and if I put HttpServletRequest instead of HttpServletResponse, it works.
If the doPost method doesn't have any parameter, it works!
So there's a problem with HttpServletResponse...
Does anyone know what's Locale got to do with HttpServletResponse????
Thanks for your help
Philippe -
SOAP Request with Web Service Security
Hi masters of XI,
the Oasis standard for web services security saids that exists three levels of security for web services, at higher level is Encryption, middle level is signature and at lower level is authentication with username and password inside the soap envelope.
I need to do a SOAP Request signed with a X.509 certificate and username and password too in SAP PI 7.0 SP11. I can sign the request with X.509 certificate without problems but i can't authenticate the request with username and password in usernametoken element like saids the Oasis standard
<wsse:Security>
<wsse:UsernameToken>
<wsse:Username>XXXX</wsse:Username>
<wsse:Password>XXXXXXXXX</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
How can we send UserNameToken's elements inside SOAP web service envelope
signing with X.509 certificate also? There are any way to do it in the
receiver agreement or receiver SOAP adapter?
thanks.Hi,
thank you very much for your answers.
I have solved the SSL comunication and i can sign with X.509 certificates. My problem is that in the SOAP envelope of resquest signed only travels the X.509 certificate and I need to send the username security token (wsse:UsernameToken) also.
<wsse:Security>
<wsse:UsernameToken>
<wsse:Username>XXXX</wsse:Username>
<wsse:Password>XXXXXXXXX</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
I can't find the solution to do it. The Netweaver documentation says that Netweaver is able to sign SOAP request with X.509 certificates and is able too for using UsernameToken as part of Oasis standard for web service security. In abap stack of NW you can assign a security profile to a web service call for signing the message or authenticate it with username/password inside SOAP envelope, but in java stack of XI i think that there is no way to do it.
This is my Request:
<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" soapenv:mustUnderstand="1">
<wsse:BinarySecurityToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" wsu:Id="CertId-71968700">MIIHdTCCBl2gAwIBAgIQOq4nmg5zi4NGsIGjPUZVuTANBgkqhkiG9w0BAQUFADCCAT4xCzAJBgNVBAYTAkVTMTswOQYDVQQKEzJBZ...8d4pAJYk=</wsse:BinarySecurityToken>
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#" Id="Signature-104376803">
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<ds:Reference URI="#id-104309952">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue>R6WE9gs+l496jHCgslgALWswEnE=</ds:DigestValue>
</ds:Reference>
<ds:Reference URI="#Timestamp-104310599">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue>aiCTZ0WwiZQEv8zVmmf8GLu/bYA=</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>YR9Q5oUA6kFFmPYOIOQPTOgTgapMbkmgdlDM/TZJ2CS8ENAntfsnmpEbpUgOPUVMkgaECog0OKvlADHP0HvJtPdm2NJljZNCCgrk3hlmmtkXkRauVuH5KRiHE5NeWT4+Uspp3ashebu0IuOO66zt4Q=</ds:SignatureValue>
<ds:KeyInfo Id="KeyId-104377209">
<wsse:SecurityTokenReference xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="STRId-104377346">
<wsse:Reference URI="#CertId-71968700" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"/>
</wsse:SecurityTokenReference>
</ds:KeyInfo>
</ds:Signature>
<wsu:Timestamp xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="Timestamp-104310599">
<wsu:Created>2008-01-16T21:28:44.081Z</wsu:Created>
<wsu:Expires>2008-01-16T21:33:44.081Z</wsu:Expires>
</wsu:Timestamp>
</wsse:Security>
</soapenv:Header>
And this is the request I need:
<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" soapenv:mustUnderstand="1">
<wsse:BinarySecurityToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" wsu:Id="CertId-71968700">MIIHdTCCBl2gAwIBAgIQOq4nmg5zi4NGsIGjPUZVuTANBgkqhkiG9w0BAQUFADCCAT4xCzAJBgNVBAYTAkVTMTswOQYDVQQKEzJBZ...8d4pAJYk=</wsse:BinarySecurityToken>
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#" Id="Signature-104376803">
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<ds:Reference URI="#id-104309952">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue>R6WE9gs+l496jHCgslgALWswEnE=</ds:DigestValue>
</ds:Reference>
<ds:Reference URI="#Timestamp-104310599">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue>aiCTZ0WwiZQEv8zVmmf8GLu/bYA=</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>YR9Q5oUA6kFFmPYOIOQPTOgTgapMbkmgdlDM/TZJ2CS8ENAntfsnmpEbpUgOPUVMkgaECog0OKvlADHP0HvJtPdm2NJljZNCCgrk3hlmmtkXkRauVuH5KRiHE5NeWT4+Uspp3ashebu0IuOO66zt4Q=</ds:SignatureValue>
<ds:KeyInfo Id="KeyId-104377209">
<wsse:SecurityTokenReference xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="STRId-104377346">
<wsse:Reference URI="#CertId-71968700" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"/>
</wsse:SecurityTokenReference>
</ds:KeyInfo>
</ds:Signature>
<!-- THIS IS THE PART I NEED -->
<wsse:UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="UsernameToken-104312926">
<wsse:Username>xxxxxxx</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText"/>
</wsse:UsernameToken>
<!-- -->
<wsu:Timestamp xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="Timestamp-104310599">
<wsu:Created>2008-01-16T21:28:44.081Z</wsu:Created>
<wsu:Expires>2008-01-16T21:33:44.081Z</wsu:Expires>
</wsu:Timestamp>
</wsse:Security>
</soapenv:Header> -
SOAP 1.2 web service fails when SOAP header has digital signatures
Hi,
When we upgraded our JAX-RPC web services from SOAP 1.1 to SOAP 1.2, they started failing with the following response.
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<env:Header>
<env:Upgrade>
<env:SupportedEnvelope xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"
qname="soap12:Envelope"/>
</env:Upgrade>
</env:Header>
<env:Body>
<env:Fault xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<faultcode>env:VersionMismatch</faultcode>
<faultstring>Version Mismatch</faultstring>
<faultactor>http://schemas.xmlsoap.org/soap/actor/next</faultactor>
</env:Fault>
</env:Body>
</env:Envelope>
The following two errors were in log.xml
An error occurred for port: {http://xxx.xxx.xxx/xxx/1.0/ws/TestService}TestServicePort: oracle.j2ee.ws.common.soap.fault.SOAP11VersionMismatchException: Version Mismatch.
Unable to determine operation id from SOAP Message.
We use web service handlers to add and verify digital signatures. The request message seems to be making it to the web service but is failing before reaching the web service handler which verifies the digital signature.
Everything works fine when we don't add the digital signatures. The SOAP message without the digital signature doesn't have the SOAP header. I've listed the SOAP message with the digital signature below.
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"
xmlns:ns0="http://xxx.xxx.xxx/1.4/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<env:Header>
<wsse:Security
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"></ds:CanonicalizationMethod>
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"></ds:SignatureMethod>
<ds:Reference URI="#Body">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"></ds:Transform>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></ds:DigestMethod>
<ds:DigestValue>...</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>
</ds:SignatureValue>
<ds:KeyInfo>
<ds:X509Data>
<ds:X509Certificate>
</ds:X509Certificate>
</ds:X509Data>
<ds:KeyValue>
<ds:RSAKeyValue>
<ds:Modulus>
</ds:Modulus>
<ds:Exponent>AQAB</ds:Exponent>
</ds:RSAKeyValue>
</ds:KeyValue>
</ds:KeyInfo>
</ds:Signature>
</wsse:Security>
</env:Header>
<env:Body xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="Body">
<ns0:SearchRequestMessage
xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:gml="http://www.opengis.net/gml"
xmlns:xxx="http://xxx.xxx.xxxl/1.4/"
xmlns:ns5="http://www.w3.org/1999/xlink"
>
<xxx:SearchCriteria itemsPerPage="10" maxTimeOut="180000" startIndex="1" startPage="1" totalResults="25">
</xxx:SearchCriteria>
</ns0:SearchRequestMessage>
</env:Body>
</env:Envelope>
We are using Oracle AS 10.1.3.3.0, WSDL 1.1, and SOAP 1.2. Everything works fine with WSDL 1.1 and SOAP 1.1.Take a look 'How to Use a Custom Serializer with Oracle Application Server Web Services' [1].
In your case, you should be looking at BeanMultiRefSerializer (org.apache.soap.encoding.soapenc), which will serialize your data using href and providing a way to deal with cycles.
All the best,
Eric
[1] http://www.oracle.com/technology/tech/webservices/htdocs/samples/serialize/index.html -
Soap response the web service test page
Hi
I am trying to write the static client for a wlw web service. This web service doesn't have @jws:protocol specified, so it has get, post and soap. When I call one of its method using soap port in my static client, it returns the html looks like the weblogic test page for this web service. Here it is:
<-------------------- RESPONSE TO CLIENT --------------->
URL : http://localhost:7001/webservices/testWS.jws
Response Code :200
Headers :
Date=Thu, 07 Feb 2008 17:18:08 GMT
Content-Length=11724
Content-Type=text/html; charset=UTF-8
Expires=Thu, 01 Jan 1970 00:00:00 GMT
Connection=Keep-Alive
Set-Cookie=JSESSIONID=Hr9Qt7BTQQzvM0pGZhvyPjL7typsrTK1GLp0BZZQnRGFwfx90x8K!606
033313; path=/
Envelope :
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<title>BEA WebLogic Workshop: testWS.jws Web Service</title>
<link rel=stylesheet href="testWS.jws?.RESOURCE=shared.css">
<body>
<table border=0 cellspacing=0 cellpadding=0 width="100%">
.....First why doesn't it return soap message? And it doesn't execute the method at all. How can I make it call the method and return the soap message?
Thanks
Edited by Holy at 02/08/2008 9:45 AMFigured out that the testWS.jws is deployed to use ssl. But the wsdl generated has http. It works fine after I manually changed to https.
-
Dynamically set the soap address for web services
Hi,
I am developing an Oracle J2ee1.3 web service for Oracle application server 10.1.2.
The web service needs to be deployed on to multiple servers. Hence the host and port for the soap:address needs to be changed for each server.
Eg: For the 1st server the soap:address is http://www.server1.com/test/MyWebService
For 2nd server the soap:address is http://www.server2.com/test/MyWebService
Is there any way to dynamically change this address based on the server the Web Service is deployed to?
Any help is highly appreciated.
Thanks,
SubashiniIt helps to post a link to a thread when you refer to it. If you are trying to implement that solution though, you can look at the parameter of the corresponding method being called. The parameter has type 'SIMPLE' which means that it is compatible with all of the predefined elementary ABAP types. In this case, you should use 'STRING'.
-
Changing SOAP Namespace for Web Service
Hi Experts,
Got a requirement to modify the SOAP namespace for a BAPI program exposed as a web service on SAP.
The fieldd denoting the SOAP namespace is accessible via transaction SE80 and navigating under: Package Name>Enterprise Services>Service Definitions> and double clicking on the exposed web service and selecting "Properties".
The SAP SOAP namespace provided by default is: urn:sap-com:document:sap:rfc:functions
Is anyone aware of a means to modify this namespace on the web service? Any help would be greatly appreciated. Thanks!
Regards,
Lionelhi tan,
Although the SOAP Runtime is generally designed for RFC-type calls, it can also be used to access Web Services that are not implemented in a Web AS. For example, the Google search engine offers some services using SOAP, which can be accessed from the SAP Web AS.
Naming Conventions
The SOAP Runtime offers three methods of representing the original ABAP names (everything in upper case and separated by underscores) as data types in XML. Each method is associated with a different XML namespace:
urn:sap-com:document:sap:rfc:functions this is the canonical representation, which means that all names in the XML document are represented as they are in ABAP on a 1:1 basis. For repeating groups (such as the rows of a table), an XML element with the tag name item is generated (in writing) and expected (in parsing).
urn:sap-com:document:sap:soap:functions:uc-style this naming convention is similar to the first one, with the difference that instead of item, the name of the structure of the table row is generated or expected.
urn:sap-com:document:sap:soap:functions:mc-style this third convention also involves conversion of the upper case ABAP names to mixed case (both upper and lower case), according to the following algorithm: All characters except the first one are implicitly in lower case, and the underscore acts as a Shift key to effect an upper case character. RFC_SYSTEM_INFO thus becomes RfcSystemInfo. The addition of an initial underscore makes the first character lower case: RFCSYSTEM_INFO thus becomes rfcSystemInfo. An underscore character is transferred by adding an additional underscore: RFC__SYSTEM_INFO thus becomes Rfc_systemInfo.
When using the SOAP Runtime caller side, note the following points regarding the naming convention:
If the called Web Service is implemented in the Web AS 6.20, always use the namespace convention urn:sap-com:document:sap:rfc:functions. The namespace for the SOAP method must also be set according to this convention. To do this, specify the importing parameter nsvalue of the method set_method in the class CSoapDocument.
Setting the namespace of the naming convention for the SOAP method does NOT automatically mean that the SOAP Runtime also sets the naming convention for serialized SOAP messages. As a developer, you must ensure that the naming conventions are followed. To do this, you can use the methodsset_tag_name_format and set_item_name_format:
The method set_tag_name_format of the class CSoapDokument can be used to control the upper case or mixed case naming convention for tags that correspond to ABAP data types. To activate the normal ABAP format (upper case), use the value CSoapConstants=>ic_tagfmt_default for the importing parameter format. To switch to the mixed format, use the value CSoapConstants=>ic_tagfmt_mixcase.
The method set_item_name_format of the class CSoapDokument is used to control the use of the tag name for repeating groups in ABAP data types (table rows). To implement the structure name of the table row, set the value CSoapConstants=>ic_itemfmt_default for the importing parameter format. To use item as a tag, set the value CSoapConstants=>ic_itemfmt_useitem.
All names passed to the API must be in a format that is expected by the server side. This affects the importing parameter name of both the methods set_method and add_parameter of the class CSoapDocument. The SOAP Runtime caller side does not perform any conversion of these names. The document class on the calling side does NOT take into account the namespace you have selected here.
You should only implement the mixed case naming convention where it is necessary. This particularly applies when calling external Web Services, over the structure of which you have no control.
Sending the SOAP Header in the Call
The SOAP Framework does not provide general support for the handling of SOAP Header elements.
However, for calling external Web services, it is sometimes sufficient to be able to send simple Header entries as part of the request. In this special case, you can use the class CSoapDocumentHeader.
An instance of the class can be filled using the methods set_header_as_string or set_header_as_dataref. Using the method add_header, it can then be added to an instance of the class CSoapDocument, and is then serialized as a part of the document instance when the call is made.
regards
karthik
dont forgrt to reward me points if it helps u
Maybe you are looking for
-
How do I erase ALL the files on my MacBook Pro?
I've just gotten a new MacBook Air and successfully migrated all my data from my MacBook Pro. Now I'd like to clean up my MacBook Pro for my son. I don't want to erase all the applications, but I do want to erase all my files. Is there an easy way to
-
Mbpr won't boot up, stuck on white screen with apple logo when I turn it on
This morning I noticed the apple logo on the outer shell of my mac was lit up, I thought this was very odd because the lid was closed and like all laptops when thier lids are shut the display ect. are supposed to switch off/go to standby? Anyway I qu
-
How to create customized controls in LabWindows CVI
Hello, I would like to create more "user friendly" controls in LabWindows. For example I would like to use a "Round command button" and add a picture on it. Do you know if there is a way to do it?
-
Expose an FM or RFC as an http url (invoke FM by opening url in browser)
Hi, We have a function module e.g. Z_PROCESS_ORDERS, it does not have any import parameters, and there are no export parameters. the FM basically performs some action in SAP. e.g inserting a value a ztable. is it possible to invoke this FM over the i
-
Is it possible to open multiple quicklooks simultaneously?
Quicklook is a great application for previewing documents with different file types. And it would be even more great if i could use Quicklook to look/work at multiple files at the same time, i can't find if their is a Plugin or Setting which enable t