on 03-14-2011 9:33 AM
hi,
i have a scenario
nonSapAppl>SoapSenderAdapter>PI>InboundProxy>Ecc
i am using xmlspy or SoapUi tool as nonSapAppl for invoking the scenario for testing.
the soapUI tool needs the url of the wsdl.
for that, i logged on to ID, and opened the SenderAgreement and Menu -> DisplayWSDL, and there i found the wsdl url as:
http://pidevsrvr:50100/dir/wsdl?p=sa/bfcbca882eba3df39bebc4ff6014c336
by using this url in soapUi tool, i am able to invoke the scenario.
it seems the url is generated by the pi system, this url is made up some unique set of chars like bfcbca882eba3df39bebc4ff6014c336 at the end.
1. is this url fixed for this for this scenario.
2. currently we develeoped on pi dev server, if transport to qa or production, will the url except the hostname will remain exactly the same.
3. is there any advantage of using "publish in SR" option.
4. our nonSAP application guy is asking some readable url prefarably, like http://pidevsrvr:50100/dir/wsdl?p=sa/scenarioReplicateAddressData. is it possible to customise the url.
thanks,
Madhu_1980
>>2. currently we develeoped on pi dev server, if transport to qa or production, will the url except the hostname will remain exactly the same.
Yes, if you dont change the data structure.
>>3.is there any advantage of using "publish in SR" option
You can publish the web service in service registry . So when a client invoke webservice the call is routed to registry to check whether the registered service is the requesting service from the client and then call is routed to the webservice. Even without service registry also you can host the webservice. It is not mandatory. Search SDN for service registry learning.
>>4. our nonSAP application guy is asking some readable url prefarably, like http://pidevsrvr:50100/dir/wsdl?p=sa/scenarioReplicateAddressData. is it possible to customise the url.
Dont understand the meaning of customize... But, you can just change the host name if you move to different environment and provide that WSDL URL to the client. Or WSDL Itself has all the ingredients of your Web Service. You dont need to give WSDL URL again... Search for address:location tag in WSDL and you will find the WSDL URL.
Also see my reply in this thread for how to create WSDL too.
Hope this helps
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
I am trying to call PI web service for Oracle Procedure. I am able to test it from SOAP UI Client. But when calling from Oracle, exception is thrown.
Procedure -:
/* Formatted on 2014/06/16 20:38 (Formatter Plus v4.8.8) */
CREATE OR REPLACE PROCEDURE cdba.p_init_ws_transaction
AS
v_soap_request_text CLOB;
v_request UTL_HTTP.req;
v_response UTL_HTTP.resp;
v_buffer VARCHAR2 (32767);
v_response_xml CLOB;
l_soap_env XMLTYPE;
l_soap_body XMLTYPE;
ls_ematn VARCHAR2 (50);
ls_test VARCHAR2 (1000);
s_namespace VARCHAR2 (1000);
l_namespace VARCHAR2 (50);
l_raw_data RAW (512);
l_clob_response CLOB;
l_buffer_size NUMBER (10) := 512;
l_substring_msg VARCHAR2 (512);
-- l_napaka_opis VARCHAR2 (1000);
-- l_napaka_koda VARCHAR2 (100);
-- l_tmp VARCHAR2 (100);
BEGIN
-- --nastavimo certifikat in geslo
-- UTL_HTTP.set_wallet (g_lokacija_certifikata, g_geslo);
--nastavimo soap request:
v_soap_request_text :=
' <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:amp="http://tsl/mm/100064/AMPLDetails">
<soapenv:Header/>
<soapenv:Body>
<amp:MT_AMPLDetails_Request>
<row>
<BMATN>0008C0053</BMATN>
</row>
</amp:MT_AMPLDetails_Request>
</soapenv:Body>
</soapenv:Envelope>';
SELECT XMLTYPE (v_soap_request_text).EXTRACT ('//row/BMATN/text()',
s_namespace || l_namespace
).getstringval ()
INTO ls_test
FROM DUAL;
DBMS_OUTPUT.put_line (ls_test);
v_request :=
UTL_HTTP.begin_request
method => 'POST'
);
--UTL_HTTP.set_header (v_request, 'User-Agent', 'Mozilla/4.0');
--v_request.method := 'POST';
UTL_HTTP.set_body_charset (v_request, 'UTF8');
UTL_HTTP.set_header (r => v_request,
NAME => 'Content-Length',
VALUE => DBMS_LOB.getlength (v_soap_request_text)
);
UTL_HTTP.set_header (r => v_request,
NAME => 'SOAPAction',
VALUE => 'http://sap.com/xi/WebService/soap1.1'
);
UTL_HTTP.set_authentication (v_request, '157769', 'tatasap@89');
UTL_HTTP.write_text (r => v_request, DATA => v_soap_request_text);
<<request_loop>>
FOR i IN 0 .. CEIL (LENGTH (v_soap_request_text) / l_buffer_size) - 1
LOOP
l_substring_msg :=
SUBSTR (v_soap_request_text, i * l_buffer_size + 1, l_buffer_size);
DBMS_OUTPUT.put_line (l_substring_msg);
BEGIN
l_raw_data := UTL_RAW.cast_to_raw (l_substring_msg);
UTL_HTTP.write_raw (r => v_request, DATA => l_raw_data);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
EXIT request_loop;
END;
END LOOP request_loop;
v_response := UTL_HTTP.get_response (v_request);
BEGIN
--convert the response to a CLOB
<<response_loop>>
LOOP
DBMS_OUTPUT.put_line ('1');
UTL_HTTP.read_raw (v_response, l_raw_data, l_buffer_size);
l_clob_response :=
l_clob_response || UTL_RAW.cast_to_varchar2 (l_raw_data);
DBMS_OUTPUT.put_line (UTL_RAW.cast_to_varchar2 (l_raw_data));
END LOOP response_loop;
EXCEPTION
WHEN UTL_HTTP.end_of_body
THEN
UTL_HTTP.end_response (v_response);
END;
DBMS_OUTPUT.put_line ('done');
DBMS_OUTPUT.put_line ('done');
s_namespace :=
'xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema/" ';
l_namespace := 'xmlns="http://tempuri.org/"';
-- SELECT XMLTYPE (l_clob_response).getstringval ()
-- INTO ls_test
-- FROM DUAL;
SELECT XMLTYPE (l_clob_response).EXTRACT ('//record/EMATN/text()',
s_namespace || l_namespace
).getstringval ()
INTO ls_test
FROM DUAL;
DBMS_OUTPUT.put_line (ls_test);
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line ('exception block');
DBMS_OUTPUT.put_line (DBMS_UTILITY.format_error_backtrace);
UTL_HTTP.end_response (v_response);
DBMS_OUTPUT.put_line (SQLERRM);
-- p_napaka := SQLERRM;
-- p_url_megapos := NULL;
END; -- end p_init_ws_transaction
/
Output -:
0008C0053
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:amp="http://tsl/mm/100064/AMPLDetails">
<soapenv:Header/>
<soapenv:Body>
<amp:MT_AMPLDetails_Request>
<row>
<BMATN>0008C0053</BMATN>
</row>
</amp:MT_AMPLDetails_Request>
</soapenv:Body>
</soapenv:Envelope>
1
<?xml version='1.0'?>
<!-- see the documentation -->
<SOAP:Envelope xmlns:SOAP='http://schemas.xmlsoap.org/soap/envelope/'>
<SOAP:Body>
<SOAP:Fault>
<faultcode>SOAP:Server</faultcode>
<faultstring>Server Error</faultstring>
<detail>
<s:SystemError xmlns:s='http://sap.com/xi/WebService/xi2.0'>
<context>XIAdapter</context>
<code>ADAPTER.JAVA_EXCEPTION</code>
<text><![CDATA[
java.lang.NullPointerException: while trying to invoke the method java.lang
1
.String.indexOf(int) of a null object loaded from local variable 'ctype'
at com.sap.aii.af.sdk.xi.net.MIMEInputSource.decodeContentType(MIMEInputSource.java:456)
at com.sap.aii.af.sdk.xi.net.MIMEInputSource.readBody(MIMEInputSource.java:351)
at com.sap.aii.af.sdk.xi.net.MIMEServletInputSource.parse(MIMEServletInputSource.java:58)
at com.sap.aii.adapter.soap.web.MessageServlet.doPost(MessageServlet.java:343)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:754)
at javax.servlet.http.HttpServl
1
et.service(HttpServlet.java:847)
at com.sap.engine.services.servlets_jsp.server.Invokable.invoke(Invokable.java:152)
at com.sap.engine.services.servlets_jsp.server.Invokable.invoke(Invokable.java:38)
at com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl.runServlet(HttpHandlerImpl.java:457)
at com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl.handleRequest(HttpHandlerImpl.java:210)
at com.sap.engine.services.httpserver.server.RequestAnalizer.startServlet(RequestAnalizer.java:441)
at
1
com.sap.engine.services.httpserver.server.RequestAnalizer.startServlet(RequestAnalizer.java:430)
at com.sap.engine.services.servlets_jsp.filters.DSRWebContainerFilter.process(DSRWebContainerFilter.java:38)
at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:78)
at com.sap.engine.services.servlets_jsp.filters.ServletSelector.process(ServletSelector.java:81)
at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:78)
at com.sap.engine.services
1
.servlets_jsp.filters.ApplicationSelector.process(ApplicationSelector.java:276)
at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:78)
at com.sap.engine.services.httpserver.filters.WebContainerInvoker.process(WebContainerInvoker.java:81)
at com.sap.engine.services.httpserver.chain.HostFilter.process(HostFilter.java:9)
at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:78)
at com.sap.engine.services.httpserver.filters.ResponseLogWriter.
1
process(ResponseLogWriter.java:60)
at com.sap.engine.services.httpserver.chain.HostFilter.process(HostFilter.java:9)
at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:78)
at com.sap.engine.services.httpserver.filters.DefineHostFilter.process(DefineHostFilter.java:27)
at com.sap.engine.services.httpserver.chain.ServerFilter.process(ServerFilter.java:12)
at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:78)
at com.sap.engine.services.
1
httpserver.filters.MonitoringFilter.process(MonitoringFilter.java:29)
at com.sap.engine.services.httpserver.chain.ServerFilter.process(ServerFilter.java:12)
at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:78)
at com.sap.engine.services.httpserver.filters.SessionSizeFilter.process(SessionSizeFilter.java:26)
at com.sap.engine.services.httpserver.chain.ServerFilter.process(ServerFilter.java:12)
at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractC
1
hain.java:78)
at com.sap.engine.services.httpserver.filters.MemoryStatisticFilter.process(MemoryStatisticFilter.java:57)
at com.sap.engine.services.httpserver.chain.ServerFilter.process(ServerFilter.java:12)
at com.sap.engine.services.httpserver.chain.AbstractChain.process(AbstractChain.java:78)
at com.sap.engine.services.httpserver.filters.DSRHttpFilter.process(DSRHttpFilter.java:43)
at com.sap.engine.services.httpserver.chain.ServerFilter.process(ServerFilter.java:12)
at com.sap.engine.services.http
1
server.chain.AbstractChain.process(AbstractChain.java:78)
at com.sap.engine.services.httpserver.server.Processor.chainedRequest(Processor.java:475)
at com.sap.engine.services.httpserver.server.Processor$FCAProcessorThread.process(Processor.java:269)
at com.sap.engine.services.httpserver.server.rcm.RequestProcessorThread.run(RequestProcessorThread.java:56)
at com.sap.engine.core.thread.execution.Executable.run(Executable.java:122)
at com.sap.engine.core.thread.execution.Executable.run(Executable.java:10
1
1)
at com.sap.engine.core.thread.execution.CentralExecutor$SingleThread.run(CentralExecutor.java:328)
]]></text>
</s:SystemError>
</detail>
</SOAP:Fault>
</SOAP:Body>
</SOAP:Envelope>
1
done
done
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Two links we can use if we are using some external tool to test Web Service like SOAP UI.
First the generated one form ID other as per the SOAP channel configuration help page on SCN.
http://<PI HOST name>:<PORT>/sap/xi/engine?type=entry&version=3.0&Sender.Service=<Sender Service Name>&Interface=<Namespace>^<Interface Name>&QualityOfService=<Quality of Service>
With default suggested post as '8000' in above link it will skip the sender channel and reach to integration engine.
So if you want to use channel then use below link
http://<PI HOST name>:<PORT as what comes in IFR page>/XISOAPAdapter/MessageServlet?channel=<Party>:<Service Name>:<Channel Name>
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Yes, the URL format is fix. and it is simple.
http://host:HTTPPort/XISOAPAdapter/MessagingServlet?channel=party:sendersystem:CC_sender
in above URL provide your sender service componenet name insted of sendersystem.
and provide SOAP sender communication channel name in place of CC_sender
provide your PI system host and http name inplace of host and https and use this.. it will work..
thanks,
Bhupesh
User | Count |
---|---|
93 | |
10 | |
10 | |
9 | |
9 | |
7 | |
6 | |
5 | |
5 | |
4 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.