Accessing CAF application service from outside
Hi,
Can CAF application service be called from outside the CAF? Example from a pure JSP page?
Mayukh
You can also call a CAF service via the EJB protocol from JSP. Each CAF Service gets deployed as a Stateless Session bean. You can view these in the IDE if you switch to the J2EE perspective in your CAF project.
Similar Messages
-
Problem with accessing a web service from outside world
Hello SAP experts
I have a custom BAPI for which I have created a webservice.
If I login as an admin to the BOX where I have installed this SAP server and open an internet explorer window and give the URL, I can access the web service without any problem. This is just a simple BAPI that searches for some data from a table based.
However, when I give the same URL from a different PC, it can open the web service and in the fields if I give the data and click on send button, it fails with an error '500 Internal Server Error '.
I looked for the details of this error on internet and it says that this is some general error and solutions that it suggested doesn't help my scenario.
Has anyone seen this problem before? Any help will be highly appreciated.
Tks
Rami have tried the stack trace in the catch but as i said on the statement where i made the object for the service the program just exits. it didn't return any exception or any output.
thanx for refering me any answer....... -
Access Application Services from Web Dynpro DC
Hi Experts,
We created a CAF DC which has an application service called ClientAppService, with a method findClientsById. We also created another DC, a Web Dynpro DC, which makes use of the model generated by the CAF DC. We have programmatic access to the application service through
ClientAppServiceProxy.findClientsById()
, but when running the DC which makes this call we receive the following error:
com.sap.caf.rt.exception.CAFBaseRuntimeException: Query with name findClientsById does not exist
We've managed to call Application Services before, but that was when the Web Dynpro was in the same DC as the CAF services. Any ideas on how to fix this?
Thanks,
JPHi Smith,
One of the possible reasons of this error is may be your CAF project is not properly deployed in the Server in which you have deployed your WebDynpro project. So during the execution of the WebDynpro project while it tries to invoke this findby from the Application Service of your CAF project it fails to find a match. May be by mistake you have deployed your CAF Application Service first and added the findBy method later. So if your properly deploy your total CAF project in the same server in which you have deployed your WebDynpro project it may resolve your problem.
Thanks and Regards
Avijit -
Unable to instantiate GP process from CAF application service
Hi,
I am trying to instantiate a process from my CAF application service as follows.
IGPProcess process = GPProcessFactory.getDesigntimeManager().getActiveTemplate("7CE44BF090BF11D99817000D60B211F1",user);
When the execution reaches this step, I am getting the following exception.
com.sap.engine.frame.core.load.SAPClassNotFoundException
I suspect that CAF runtime is not able to load GPProcessFactory class. Is there any settings that need to be done or I have to deploy something on the server?
Please help.
Thanks
RaghavHi Raghavendra,
It seems you are using SPS7 !
Check runtime reference for J2ee application in application-j2ee-engine.xml :
<reference
reference-type="weak">
<reference-target
provider-name="sap.com"
target-type="library">cafeugp~api</reference-target>
</reference>
Best regards,
Aliaksei -
Accessing custom Portal service from a java application
We have a custom portal service that connects to BW using xmla. How do you access this portal service from a java application. Not from web dynpro, jsp or servlet but from the java code.
Can we use the INITIAL_CONTEXT_FACTORY to get access to the portal service.
Thank You
D.KNow I tried the following:
I've added the prtapi.jar and the service's jar to the additional-lib folder and added the appropriate entries to library.txt and reference.txt.
Now I can obtain now the PortalRuntime, but this is not initialized.
Has anybody a solution for this problem? Help would be high appreciated!
Regards,
Matthias -
Exception in CAF application service
Hi All
I am trying to access the BAPI bapi__mddataset__get__axis__info
from a CAF application service. But receive following exception. Any clue how to solve it.
at com.sap.caf.rt.bol.da.remote.MessageEntityConverter.createNewInstance(MessageEntityConverter.java:788)
at com.sap.caf.rt.bol.da.remote.MessageEntityConverter.retrieveElementValue(MessageEntityConverter.java:494)
at com.sap.caf.rt.bol.da.remote.MessageEntityConverter.retrieveMessageValue(MessageEntityConverter.java:447)
at com.ibm.cer_test.extsrv.MPConnector.process(MPConnector.java:65)
at com.ibm.cer_test.extsrv.bapi__mddataset__get__axis__info.BAPI__MDDATASET__GET__AXIS__INFOBean.BAPI__MDDATASET__GET__AXIS__INFO(BAPI__MDDATASET__GET__AXIS__INFOBean.java:40)
at com.ibm.cer_test.extsrv.bapi__mddataset__get__axis__info.BAPI__MDDATASET__GET__AXIS__INFOLocalLocalObjectImpl0.BAPI__MDDATASET__GET__AXIS__INFO(BAPI__MDDATASET__GET__AXIS__INFOLocalLocalObjectImpl0.java:115)
at com.ibm.cer_test.appsrv.mdapp.MdAppBean.getMdDataSet(MdAppBean.java:295)
at com.ibm.cer_test.appsrv.mdapp.MdAppLocalLocalObjectImpl0.getMdDataSet(MdAppLocalLocalObjectImpl0.java:115)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at com.sap.caf.rt.services.serviceaccess.ServiceWrapper.findByDataObject(ServiceWrapper.java:269)
at com.sap.caf.rt.services.serviceaccess.CAFServiceAccessBeanImpl.findByDataObject(CAFServiceAccessBeanImpl.java:223)
at com.sap.caf.rt.services.serviceaccess.CAFServiceAccessLocalLocalObjectImpl20.findByDataObject(CAFServiceAccessLocalLocalObjectImpl20.java:875)
at com.sap.caf.rt.ui.cool.generic.AspectServiceAccess.findBy(AspectServiceAccess.java:275)
at com.sap.caf.rt.ui.cool.generic.Query.execute(Query.java:218)
at com.sap.caf.ui.servicebrowser.components.visualizer.controllers.TableViewCC.execute(TableViewCC.java:323)
at com.sap.caf.ui.servicebrowser.components.visualizer.controllers.TableViewCC.setup(TableViewCC.java:276)
at com.sap.caf.ui.servicebrowser.components.visualizer.controllers.wdp.InternalTableViewCC.setup(InternalTableViewCC.java:192)
at com.sap.caf.ui.servicebrowser.components.visualizer.views.ServiceBrowserCV.onActionExecuteQuery(ServiceBrowserCV.java:180)
at com.sap.caf.ui.servicebrowser.components.visualizer.views.wdp.InternalServiceBrowserCV.wdInvokeEventHandler(InternalServiceBrowserCV.java:215)
at com.sap.tc.webdynpro.progmodel.generation.DelegatingView.invokeEventHandler(DelegatingView.java:87)
at com.sap.tc.webdynpro.progmodel.controller.Action.fire(Action.java:67)
at com.sap.tc.webdynpro.clientserver.window.WindowPhaseModel.doHandleActionEvent(WindowPhaseModel.java:420)
at com.sap.tc.webdynpro.clientserver.window.WindowPhaseModel.processRequest(WindowPhaseModel.java:132)
at com.sap.tc.webdynpro.clientserver.window.WebDynproWindow.processRequest(WebDynproWindow.java:330)
at com.sap.tc.webdynpro.clientserver.cal.AbstractClient.executeTasks(AbstractClient.java:143)
at com.sap.tc.webdynpro.clientserver.session.ApplicationSession.doProcessing(ApplicationSession.java:299)
at com.sap.tc.webdynpro.clientserver.session.ClientSession.doApplicationProcessingStandalone(ClientSession.java:707)
at com.sap.tc.webdynpro.clientserver.session.ClientSession.doApplicationProcessing(ClientSession.java:661)
at com.sap.tc.webdynpro.clientserver.session.ClientSession.doProcessing(ClientSession.java:229)
at com.sap.tc.webdynpro.clientserver.session.RequestManager.doProcessing(RequestManager.java:152)
at com.sap.tc.webdynpro.serverimpl.defaultimpl.DispatcherServlet.doContent(DispatcherServlet.java:62)
at com.sap.tc.webdynpro.serverimpl.defaultimpl.DispatcherServlet.doPost(DispatcherServlet.java:53)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl.runServlet(HttpHandlerImpl.java:390)
at com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl.handleRequest(HttpHandlerImpl.java:264)
at com.sap.engine.services.httpserver.server.RequestAnalizer.startServlet(RequestAnalizer.java:347)
at com.sap.engine.services.httpserver.server.RequestAnalizer.startServlet(RequestAnalizer.java:325)
at com.sap.engine.services.httpserver.server.RequestAnalizer.invokeWebContainer(RequestAnalizer.java:887)
at com.sap.engine.services.httpserver.server.RequestAnalizer.handle(RequestAnalizer.java:241)
at com.sap.engine.services.httpserver.server.Client.handle(Client.java:92)
at com.sap.engine.services.httpserver.server.Processor.request(Processor.java:148)
at com.sap.engine.core.service630.context.cluster.session.ApplicationSessionMessageListener.process(ApplicationSessionMessageListener.java:33)
at com.sap.engine.core.cluster.impl6.session.MessageRunner.run(MessageRunner.java:41)
at com.sap.engine.core.thread.impl3.ActionObject.run(ActionObject.java:37)
at java.security.AccessController.doPrivileged(Native Method)
at com.sap.engine.core.thread.impl3.SingleThread.execute(SingleThread.java:100)
at com.sap.engine.core.thread.impl3.SingleThread.run(SingleThread.java:170)
Caused by: java.lang.ClassNotFoundException: com.ibm.cer_test.extsrv.bapi__mddataset__get__axis__info.output.AXIS__INFO
Loader Info -
ClassLoader name: [ibm.com/cer_test]
Parent loader name: [Frame ClassLoader]
References:
common:service:http;service:servlet_jsp
service:ejb
common:service:iiop;service:naming;service:p4;service:ts
service:jmsconnector
library:jsse
library:servlet
common:library:IAIKSecurity;library:activation;library:mail;library:tcsecssl
library:ejb20
library:j2eeca
library:jms
library:opensql
common:library:com.sap.security.api.sda;library:com.sap.security.core.sda;library:security.class;library:webservices_lib;service:adminadapter;service:basicadmin;service:com.sap.security.core.ume.service;service:configuration;service:connector;service:dbpool;service:deploy;service:jmx;service:jmx_notification;service:keystore;service:security;service:userstore
interface:resourcecontext_api
interface:webservices
interface:cross
interface:ejbserialization
sap.com/cafruntimeear
library:com.sap.guid
library:com.sap.util.monitor.jarm
sap.com/com.sap.jdo
library:cafmetamodellib
sap.com/caf~core
library:cafruntimeconnectivity
library:cafruntimeconnectivity~base
service:applocking
interface:security
library:cafruntimeapi~lib
service:tcsecdestinations~service
interface:tcsecdestinations~interface
Resources:
C:
usr
sap
J17
JC01
j2ee
cluster
server0
apps
ibm.com
cer_test
src.zip
C:
usr
sap
J17
JC01
j2ee
cluster
server0
apps
ibm.com
cer_test
EJBContainer
applicationjars
ibm.comcer_testejbmodule.jar
C:
usr
sap
J17
JC01
j2ee
cluster
server0
apps
ibm.com
cer_test
EJBContainer
clientjars
clientibm.comcer_testejbmodule.jar
Loading model: {parent,references,local}
at com.sap.engine.frame.core.load.ReferencedLoader.loadClass(ReferencedLoader.java:382)
at com.sap.caf.rt.bol.da.remote.MessageEntityConverter.createNewInstance(MessageEntityConverter.java:781)
... 50 more
Thanks in advance
SudipHi,
I too got an exception like that.
1. Instead of code
patentServiceLocal local = this.getpatentService();
local.update(OBJECT);
use the following
this.getpatentService().update(OBJECT);
I got by problem solved this way.
Regards,
Srinivasan Subbiah -
Problem accessing https Web service from behind proxy
Hi all,
I have this constant timeout issue which occurs whenever I try to access the Web service from behind a proxy.
Find below the error logs -
AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
faultSubcode:
faultString: java.net.ConnectException: Connection timed out: connect
faultActor:
faultNode:
faultDetail:
{http://xml.apache.org/axis/}stackTrace:java.net.ConnectException: Connection timed out: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:305)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:171)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:158)
at java.net.Socket.connect(Socket.java:452)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at org.apache.axis.components.net.DefaultSocketFactory.create(DefaultSocketFactory.java:136)
at org.apache.axis.components.net.DefaultSocketFactory.create(DefaultSocketFactory.java:100)
at org.apache.axis.transport.http.HTTPSender.getSocket(HTTPSender.java:129)
at org.apache.axis.transport.http.HTTPSender.writeToSocket(HTTPSender.java:389)
at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:87)
at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:144)
at org.apache.axis.client.Call.invokeEngine(Call.java:2688)
at org.apache.axis.client.Call.invoke(Call.java:2671)
at org.apache.axis.client.Call.invoke(Call.java:2357)
at org.apache.axis.client.Call.invoke(Call.java:2280)
at org.apache.axis.client.Call.invoke(Call.java:1741)
I am using Tomcat 5.0.19 . Could anyone suggest a possible solution to the same?
The system works fine when I use a http endpoint.Hi,
By default, your application tries to connect to the Net directly : if you have to specify a proxy, use either these lines in your code :
System.setProperty("http.proxySet", "true");
System.setProperty("http.proxyHost", "proxy");
System.setProperty("http.proxyPort", "8080");
Or specify them in the command line with the "-D"option.
Ex : java .... -Dhttp.proxySet=true .... MyApp
Hope it helps.
See ya -
Error in executing RFC or CAF Application Service
Hello Everybody,
I am creating course approval process, in which I am calling RFC for user info and after course approval, calling CAF application service to persist this data.
But, both services are not working in process. I have tested callable objects for these services and tested successfully.
But, when I am attaching it in the process then process can't go forward from this point.
I have checked in Log viewer and found following error:
Path to object does not exist at com.sap.caf.eu.gp.model.pfw.local, the whole lookup name is sap.com/com.sap.caf.eu.gp.model.pfw.local/GPUWLBridge.
What should be the problem in this?
If I remove these services then whole process works fine.
Thanks in advance,
BhavikHello All,
Is there any concept like, I call perticular backgound object first time then I cannot call that object for some period of time?
I am getting same error in calling RFC callable object as well as CAF service callable object.
I can execute these callable objects in the process first time successfully. But, When I execute this process second time, these callable objects won't execute.
I can execute same process after 3 to 4 hours successfully once.
What should be the reason behind this? -
CAF Application services project -Error
Hi
I'm creating in CAF Application services project
Application is deployed but go to the CAF UI Admin part get Bellow Error
Failed to get service module: error <null>
Failed to read configuration data from XML fail. Configuration name: <null> Error: Configuration does not exist.
Regards
Srinivasclosed
-
How to log Exceptions raised in CAF Application Services
Hi All,
When there is an Exception rasing in CAF Application Service custom method implementation what are the steps need to follow for send that exception details to log files & where those log files will be generated i.e either in server, local system, etc.
If we use following 2 different lines please explain me where that trace is going to written:
1) System.out.println(e);
2) e.printStackTrace();
Thanks in Advance,
Uday.Hi Uday,
Try this (in my case I'm using that in Background CO that implements IGPBackgroundCallableObject ):
public static Location logger =
Location.getLocation(<yourClass>.class);
Catch block:
} catch (GPInvocationException e) {
throw new GPTechnicalCallableObjectException(
logger,
resourceAccessor,
"ERROR_PARAMETERS",
e);
} catch (GPEngineException e) {
throw new GPTechnicalCallableObjectException(
logger,
resourceAccessor,
e.getMessage(),
e);
Reward points if it's helpful. -
How to access a web service from a XLet
Hello,
I am new in software development to ITV and I dint find too many usefull information teaching how to access a web service from a XLet running in a STB. Are there anybody who can give me some help, maybe sample or tutorial?
Gratefull
Davidhi,
you can "borrow" the source code from [Yambo a free soft open source presentation engine (AKA XML microbrowser Xlet )|http://www.cineca.tv/labs/mhplab/index-en.html] both local and on a http remote connection.
hope it helps..
bye
andrea -
Access a web service from pl/sql
I am trying to access a web service from pl/sql. I have downloaded the code from
http://www.oracle.com/technology/tech/webservices/htdocs/samples/dbwebservice/DBWebServices_PLSQL.html
But when I try to execute the sql, I am getting the following error:
SQL> @local.sql
Package created.
Package body created.
No errors.
BEGIN dbms_output.put_line(time_service.get_local_time('94065')); END;
ERROR at line 1:
ORA-29273: HTTP request failed
ORA-06512: at "SYS.UTL_HTTP", line 1022
ORA-12545: Connect failed because target host or object does not exist
ORA-06512: at "WEB.DEMO_SOAP", line 71
ORA-06512: at "WEB.TIME_SERVICE", line 15
ORA-06512: at line 1
It is failing at:
resp := demo_soap.invoke(req,
'http://www.ripedev.com/webservices/LocalTime.asmx',
'http://ripedev.com/xsd/ZipCodeResults.xsd/LocalTimeByZipCode');
But in the examples that I got from downloading source code, site used was:
'http://www.alethea.net/webservices/LocalTime.asmx',
'http://www.alethea.net/webservices/LocalTimeByZipCode');
This site was not accessible. So I changed to the working site as follows, but still I
am getting the above error.
But I can access this site, if I type in the above address in the address bar of IE.
Can any body help?
I have oracle9i client installed on my machine and able to connect to server thru toad and sql plus.
or IF any body refers me to a good website for the topic of "using webservies from pl/sql" that would be great too!Here is the complete code:
time_service:
CREATE OR REPLACE PACKAGE time_service AS
FUNCTION get_local_time(zipcode IN VARCHAR2) RETURN VARCHAR2;
END;
CREATE OR REPLACE PACKAGE BODY time_service AS
-- Location of Web service definition
-- http://www.alethea.net/webservices/LocalTime.asmx?WSDL
-- http://www.ripedev.com/webservices/LocalTime.asmx?WSDL
-- http://www.xmethods.com/sd/2001/CurrencyExchangeService.wsdl
--'http://ripedev.com/xsd/ZipCodeResults.xsd/LocalTimeByZipCode style=document');
FUNCTION get_local_time(zipcode IN VARCHAR2) RETURN VARCHAR2 IS
req demo_soap.request;
resp demo_soap.response;
BEGIN
dbms_output.put_line('before new request..');
req := demo_soap.new_request('LocalTimeByZipCode',
'xmlns="http://ripedev.com/xsd/ZipCodeResults.xsd"');
dbms_output.put_line('before add param..');
demo_soap.add_parameter(req, 'ZipCode', 'xsd:string', zipcode);
dbms_output.put_line('before invoke..');
resp := demo_soap.invoke(req,
'http://www.ripedev.com/webservices/LocalTime.asmx',
'http://ripedev.com/xsd/ZipCodeResults.xsd/LocalTimeByZipCode');
dbms_output.put_line('before return..');
RETURN demo_soap.get_return_value(resp, 'LocalTimeByZipCodeResult',
'xmlns="http://www.ripedev.com/webservices/"');
END;
BEGIN
dbms_output.put_line('inside main time_service..');
END;
show errors
SET serveroutput ON
exec dbms_output.put_line(time_service.get_local_time('94065'));
Here is demo_soap.sql:
Rem
Rem $Header: soapdemo.sql 21-may-2002.13:48:17 rpang Exp $
Rem
Rem soapdemo.sql
Rem
Rem Copyright (c) 2002, Oracle Corporation. All rights reserved.
Rem
Rem NAME
Rem soapdemo.sql - <one-line expansion of the name>
Rem
Rem DESCRIPTION
Rem A PL/SQL demo package for making SOAP RPC calls.
Rem
Rem NOTES
Rem This demo package can only be used in oracle 9ir2. It utilizes 9iR2's
Rem XDB (XMLType and HttpUriType) and 9iR1's enhancements to UTL_HTTP to
Rem make SOAP RPC calls.
Rem
Rem MODIFIED (MM/DD/YY)
Rem rpang 05/21/02 - created
Rem
Rem A PL/SQL demo package that makes a SOAP RPC calls.
Rem
CREATE OR REPLACE PACKAGE demo_soap AS
/* A type to represent a SOAP RPC request */
TYPE request IS RECORD (
method VARCHAR2(256),
namespace VARCHAR2(256),
body VARCHAR2(32767));
/* A type to represent a SOAP RPC response */
TYPE response IS RECORD (
doc xmltype);
* Create a new SOAP RPC request.
FUNCTION new_request(method IN VARCHAR2,
namespace IN VARCHAR2)
RETURN request;
* Add a simple parameter to the SOAP RPC request.
PROCEDURE add_parameter(req IN OUT NOCOPY request,
name IN VARCHAR2,
type IN VARCHAR2,
value IN VARCHAR2);
* Make the SOAP RPC call.
FUNCTION invoke(req IN OUT NOCOPY request,
url IN VARCHAR2,
action IN VARCHAR2) RETURN response;
* Retrieve the sipmle return value of the SOAP RPC call.
FUNCTION get_return_value(resp IN OUT NOCOPY response,
name IN VARCHAR2,
namespace IN VARCHAR2) RETURN VARCHAR2;
END;
show errors
CREATE OR REPLACE PACKAGE BODY demo_soap AS
FUNCTION new_request(method IN VARCHAR2,
namespace IN VARCHAR2)
RETURN request AS
req request;
BEGIN
req.method := method;
req.namespace := namespace;
RETURN req;
END;
PROCEDURE add_parameter(req IN OUT NOCOPY request,
name IN VARCHAR2,
type IN VARCHAR2,
value IN VARCHAR2) AS
BEGIN
req.body := req.body ||
'<'||name||' xsi:type="'||type||'">'||value||'</'||name||'>';
END;
PROCEDURE generate_envelope(req IN OUT NOCOPY request,
env IN OUT NOCOPY VARCHAR2) AS
BEGIN
env := '<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/1999/XMLSchema">
<SOAP-ENV:Body><'||req.method||' '||req.namespace||'
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">'||
req.body||'</'||req.method||'></SOAP-ENV:Body></SOAP-ENV:Envelope>';
END;
PROCEDURE show_envelope(env IN VARCHAR2) AS
i pls_integer;
len pls_integer;
BEGIN
i := 1; len := length(env);
WHILE (i <= len) LOOP
dbms_output.put_line(substr(env, i, 60));
i := i + 60;
END LOOP;
END;
PROCEDURE check_fault(resp IN OUT NOCOPY response) AS
fault_node xmltype;
fault_code VARCHAR2(256);
fault_string VARCHAR2(32767);
BEGIN
fault_node := resp.doc.extract('/soap:Fault',
'xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/');
IF (fault_node IS NOT NULL) THEN
fault_code := fault_node.extract('/soap:Fault/faultcode/child::text()',
'xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/').getstringval();
fault_string := fault_node.extract('/soap:Fault/faultstring/child::text()',
'xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/').getstringval();
raise_application_error(-20000, fault_code || ' - ' || fault_string);
END IF;
END;
FUNCTION invoke(req IN OUT NOCOPY request,
url IN VARCHAR2,
action IN VARCHAR2) RETURN response AS
env VARCHAR2(32767);
http_req utl_http.req;
http_resp utl_http.resp;
resp response;
BEGIN
generate_envelope(req, env);
-- show_envelope(env);
http_req := utl_http.begin_request(url, 'POST','HTTP/1.0');
utl_http.set_header(http_req, 'Content-Type', 'text/xml');
utl_http.set_header(http_req, 'Content-Length', length(env));
utl_http.set_header(http_req, 'SOAPAction', action);
utl_http.write_text(http_req, env);
http_resp := utl_http.get_response(http_req);
utl_http.read_text(http_resp, env);
utl_http.end_response(http_resp);
resp.doc := xmltype.createxml(env);
resp.doc := resp.doc.extract('/soap:Envelope/soap:Body/child::node()',
'xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"');
-- show_envelope(resp.doc.getstringval());
check_fault(resp);
RETURN resp;
END;
FUNCTION get_return_value(resp IN OUT NOCOPY response,
name IN VARCHAR2,
namespace IN VARCHAR2) RETURN VARCHAR2 AS
BEGIN
RETURN resp.doc.extract('//'||name||'/child::text()',
namespace).getstringval();
END;
END;
show errors -
Web Service and CAF Application Services - How to return a table
Hello,
I'd like to build a CAF Application Service and expose it as a Web Service. This service should return an array or table which I'd like to display in a Visual Composer model.
I understand that there're limitations at CAF regarding supported data types.
Does anyone know how to get a workaround?
Any information is very appreciated.
Kind regards
StefanHi,
You can return a list.
The standard way to do this is you have to create a complex data type for response.
Configure the cardinality of this data type to 1..n so as to accomodate a list.
In your implementation add your list to this response message and return the list.
This waly you can return collections.
Hope it helps.
Regards,
Srinivasan Subbiah -
Accessing BAPI web services from CAF External Services
We have wsdl files that corresponds to BAPI calls. Using CAF, we want to create an external service using those wsdl files and then create an application service which will be in turn used by web dynpro for developing our composites. We did the following steps:
1. Created a new Composite Application Service project
2. Then right click on the External Services, select import, choose Web service.
3. Select 'Local File System or URL' option. Copy the URL from the wsdl file and pasted the URL in the 'Browse' text field and click Next. Got an error in loading the web service.
4. Removed the Proxy Server settings in Developer Studio but in vain. Tried all possible combinations with the URL also (such as with and without the wsdl key at the end of the URL and using the 'UDDI or URL' option under the Proxy Definition of the External Services Import and also with the Window => Preferences => Proxy settings).
5. Since the above options failed, copied the wsdl files to the local drive and then choose that WSDL from the file system. Able to import.
6. Created the application service and provided the custom code for the request and response.
7. Registered the external service in the CAF browser -> Administrative tools -> External Service Configuration
8. Tested the service through the Developer Studio.
The error I get is: ERROR: IOError while working with the message. Check the nested exception: Connect Refused: connect:
Any idea on what needs to be done to resolve it?authentication is required at design time to read the wsdl from bapis. did you provide username and password when importing the web service.
you can always add the username and password to the url to see if you can successfully get to the wsdl. Like that http://<webas_abap_servername>:<portnumber>/sap/bc/soap/wsdl11?services=BAPI_PO_CREATE&sap-client=<clientnumber>&sap-user=<username>&sap-password=<password> -
CAF DB Update for CAF Entity Service from Web Dynpro
Hi all,
I have created an entity service in CAF called Contacts which contains the following attributes.
phoneNo
cellNo
emailID.
Another entity service called "Person" is created. This contains the following attributes.
personId
personName
personAddr
contactsRef. (Cardinality -> 0..n , Relational Type -> Composition)
That means Contacts entity service is used within Person entity service. Now it is working fine within CAF service browser. Now the Web Dynpro DC of CAF application is used within another custom Web Dynpro DC project. I want to store data from Web Dynpro.
Within the context of component controller of Web Dynpro the structure is like
APerson
|_ personId
|_ personName
|_ personAddr
|_ contactsRef
|_ phoneNo (Under contactsRef)
|_ cellNo (Under contactsRef)
|_ emailID (Under contactsRef)
So I have written the following code within web dynpro custom method.
APerson person = PersonServiceProxy.create();
java.util.List ls = new ArrayList();
for(int i=0; i<4;i++)
AContacts contact = ContactsServiceProxy.create();
contact.setCellNo("9092130156");
contact.setEmailID("[email protected]");
contact.setPhoneNo("432258");
contact.getAspect().sendChanges();
ls.add(contact);
person.setRelatedModelObjects("contactsRef",ls);
person.setPersonID("9999");
person.setPersonName("xyz");
person.setPersonAddr("ABC, KOL");
wdContext.nodeAPerson().bind(person);
person.getAspect().sendChanges();
CAFServiceFactory.getServiceFacade(idendityDefinition.class);
After saving the data from Web Dynpro I am trying to test it from CAF service browser. But I am getting only the parent row. I mean only the value of personId, personName and personAddr fields which I have stored from Web Dynpro. But no value is coming within the table for Contacts entity service for composition relation.
Could anybody help me how can I solve my problem?
Thanks & Regards
Chandan
Message was edited by:
Chandan JashHi Chandan,
Can you do person.getRelatedModelObjects() and get the contact object, to check whether it is null, also check in the CAF DB whether the data you entered is present.
I am not sure the code is actually adding the contact model object to person.
Go thru this SDN Blog on usage of the CMI API's, there is a link for CMI documentation in it which might help you get the right code for adding the contact object.
https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/docs/library/uuid/cef4f43e-0d01-0010-db84-ede25c874115.
award points if info is helpful
Regards,
Anish
Maybe you are looking for
-
Call Function in CL_RSPLS_CR_EXIT_BASE to derive values
Dear all, we want to derive the location from item (material). If item gebinns with "EMU" then location is 2. If item beginns with "X" then locations is "68" and so on. To realise we chose characteristic relationship with derivation and based on "Exi
-
How can I publish one single site from iWeb to my .Mac account without publishing other sites that I have on iWeb? Help!?! : ) Thanks.
-
Generic problem for search help without values
Hi, Always I open a search help without values I get the warning popup "No values found" but after this no link let me come back to the previous screen. Does anybody know how I can solve this (in a standard way) thanks regards
-
Stray souls freezing my iPad. What to do?
-
I can't open my camera WVC54GCA
Why does not the camera turns on when I connect it to a power source? thanks a lot for your help!!!! Solved! Go to Solution.