on 07-15-2011 4:48 PM
Hi All,
I am trying to expose the Service Interface in PI to an external client and they are complianing that the WSDL shared is not WS-I compliant. Another issue is that the WSDL carries two ports - HTTP and HTTPS.
The error received in WS-I compliance report is as below:
***The conformance validation process failed.***
***Exception:org.wsi.WSIException***
***WSDLException (at /wsdl:definitions/wsdl:portType/wsdl:operation/wsp:Policy): faultCode=INVALID_WSDL: Encountered unexpected '{http://schemas.xmlsoap.org/ws/2004/09/policy}Policy'.***
***------------------------------------------------------------------------------***
***Nested exception is:***
***WSDLException (at /wsdl:definitions/wsdl:portType/wsdl:operation/wsp:Policy): faultCode=INVALID_WSDL: Encountered unexpected '{http://schemas.xmlsoap.org/ws/2004/09/policy}Policy'.:***
*** at org.wsi.test.profile.validator.impl.wsdl.WSDLValidatorImpl.validate(Unknown Source)***
*** at org.wsi.test.analyzer.BasicProfileAnalyzer.validateWSDL(Unknown Source)***
*** at org.wsi.test.analyzer.BasicProfileAnalyzer.validateConformance(Unknown Source)***
*** at org.wsi.test.analyzer.BasicProfileAnalyzer.main(Unknown Source)***
Further analysis shows that there is a tag <wsp:PolicyReference URI="#OP_SERVICEINTERFACENAME" />
in the WSDL which is the culprit..
My question here -
1. What can be done to ensure that the WSDL generated from Integration Builder carries only one port (HTTPS)
2. What are the options to make this WSDL WS-I compliant ?
Just to elaborate further, I have already tried the below options -
1. Updating the security profile in Service Interface creation as No.
2. Referring to the below blog /people/holger.stumm2/blog/2010/03/19/wsdl-wspolicy--what-is-it-und-how-can-i-get-rid-of-it-in-pi - However this was not helpful to me as the service interfaces in ESR are not showing up in SOAMANAGER. Am I missing something here ?
We are on SAP PI 7.1 EHP1.
Any pointers will be highly appreciated..
Thanks
Amit
>1. What can be done to ensure that the WSDL generated from Integration Builder carries only one port (HTTPS)
So simple. I believe you generate the WSDL using sender agreement. You can go and do it as follows conventional way...
Go to IB
Tools --> Display WSDL
Specify the URL of the web server (PLease note dont click propose URL)
Enter example as follows
https://hostname:50001/XISOAPAdapter/MessageServlet?channel=:BC_TEST:CC_TEST_FileName_SOAP_Sender
Where hostname enter pi name
50001 port (talk to basis if the port for https is different) default is 50001
BC_TEST - Business component or Business Service
CC_TEST_FileName_SOAP_Sender - sender comm channel
Hit continue
Next scrreen enter sender service interface name and its namespace
hit continue
Next screen enter
Business component, sender interface name and namespace
then save. Thats it.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Thanks Baskar, But I have already tried that out. The issue is that offline WSDL file not acceptable. I have to share the URL for the WSDL which they will call and download the WSDL from. Therefore I am looking for a way to disable creation of that port at the Service Interface level.
Thanks
Amit
Then another easy step.. After the client download advice them to remove <wsdl:port> tag that represents http. It creates one each for http and https.
Example:
<wsdl:port name="HTTP_Port" binding="p1:SI_S_O_TRI_TestBinding">
<soap:address location="http://test/XISOAPAdapter/MessageServlet?senderParty=&senderService=BC_test&receiverParty=&receiverService=&interface=SI_S_O_TRI_SynchronizeTask&interfaceNamespace=http://test.com/TRI/SynchronizeTask" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"/>
</wsdl:port>
<wsdl:port name="HTTPS_Port" binding="p1:SI_S_O_TRI_TestBinding">
<soap:address location="https://test/XISOAPAdapter/MessageServlet?senderParty=&senderService=BC_test&receiverParty=&receiverService=&interface=SI_S_O_TRI_SynchronizeTask&interfaceNamespace=http://test.com/TRI/SynchronizeTask" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"/>
</wsdl:port>
Regarding WS_I compliant, SAP supports Basic profile 1.0 Refer this [link|http://www.sdn.sap.com/irj/scn/go/portal/prtroot/docs/library/uuid/46d6c25d-0b01-0010-06a9-8e8218753c02?quicklink=index&overridelayout=true]
Hi Amit,
If your PI system is configured for SSL and then you can disable the ICM HTTP service, leaving only HTTPS service on.
This will genarate only HTTPS port in your sender agreement WSDL.
But make sure everythinh in your PI system is configured to USE HTTPS. including SOAMANAGER
If your SOAMANAGER does not open with https port then add a record into table HTTPURLLOC specifying protocol HTTPS, FQDN, and port .
regards,
Debashish
Thanks Debashish. So it makes more or less evident that there is no way to make PI generate only one port in the WSDL at the Service Interface Level.
Nw coming to the other question -
2. Referring to the below blog /people/holger.stumm2/blog/2010/03/19/wsdl-wspolicy--what-is-it-und-how-can-i-get-rid-of-it-in-pi - However this was not helpful to me as the service interfaces in ESR are not showing up in SOAMANAGER. Am I missing something here ? Can anybody advice on the steps to make the service interfaces in ESR appear in the SOAMANAGER page.. ?
Thanks
Amit
Hi Amit,
Is this a Proxy scenarion?
If it is a Proxy then open the transaction SOAMANGER (in application system Means ECC system not PI) go to Web Service adminstration and serach for your Proxy. Oncle you find that select it and click on "Apply Selection" there after you will see the option for creating the Service Name. Along with creating End Point there.
After doing all these you will be able to see the WSDL for your created WebService (proxy exposed as a Web service). Now to test it you have to give the Ip address and Pord with credential of PI server in the Admion setting of application server. Once you click to test that service it will take you to test page of Web Service Navigater of PI and you can test it there.
Hi Debashish, All,
This is not a proxy scenario and no ECC system is involved. I am simply trying to expose a Service Interface as a web service to external client. All other steps are known to me ( SOAMANAGER, endpoint definition), the only trouble is that I do not see the service interface I created when I open the SOA manager and try to search there..
Thanks
Amit
User | Count |
---|---|
86 | |
10 | |
10 | |
10 | |
7 | |
6 | |
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.