Изменение продукта
Для завершения интеграции нужно изменить код продукта.
Процедура
- Добавьте в файл soapactionurl.xml дополнительное действие для нового запроса. <soap-url action="GET_CATALOG_ITEMS">http://localhost:8080/services/PortalIntegratedService</soap-url>
- Добавьте переменную в файл ISOAPMessageKeys.java.
public static final String REQ_GET_CATALOG_ITEMS = "GET_CATALOG_ITEMS";
- Добавьте метод в файл WPCMediator.java для получения элементов:
public HashMap getItems(WPSContext context) throws WPCMediatorException { WPCUser user = context.getWpcUser(); // invoke WSHelper to return all catalog items Element catalogs = wsHelper.getItems(user); return CatalogNodeXMLHelper.parseCatalogsNode(catalogs);
- Добавьте метод в файл WSHelper.java для создания соответствующих запросов
IBM®
InfoSphere Master Data Management Collaboration
Server:
public Element getItems(WPCUser user) throws WPCMediatorException { String requestXML = XMLHelper.prepareWPCRequest("", REQ_GET_CATALOG_ITEMS, SYNCHRONOUS, user); SoapResponse soapResponse = invokeSOAP(getSoapURL( ISoapMessageKeys.REQ_GET_CATALOG_ITEMS), requestXML, (String)user.getProperty(WPCUser.WPC_AXIS_SESSIONID)); setWPCSessionID(soapResponse,user); String responseXML = soapResponse.getDataXML(); Element responseEnvelopElement = XMLHelper.getRootElementFromString(responseXML); // anaylize the result element. WPCNotificationBean notificationBean = WSHelper.getNotificationDetails(responseEnvelopElement); if (notificationBean.getCode() == IMediatorResultState.SUCCESS) { return XMLHelper.getFirstElementInNS(responseEnvelopElement, ISoapMessageKeys.CATALOGS); } throw new WPCMediatorException(WPCMediatorException.APPLICAION_ERROR, notificationBean); }
- Добавьте методы помощника (helper) для обработки ответов. В этом примере в CatalogNodeXMLHelper.java добавляются два метода helper для обработки ответов:
public static HashMap parseCatalogsNode(Element ctgs) { if (ctgs == null) { return null; } Element[] childElements = XMLHelper.getElementsInNS(ctgs, ISoapMessageKeys.CATALOG); return getItemsFromCatalogs(childElements); } private static HashMap getItemsFromCatalogs(Element[] catalogs) { if (catalogs == null) { return null; } HashMap itemsMap = new HashMap(); for (int i = 0; i < catalogs.length; i++) { String ctgName = XMLHelper.getFirstElementValueInNS(catalogs[i], ISoapMessageKeys.CATALOG_NAME); Element childElement = XMLHelper.getFirstElementInNS(catalogs[i], ISoapMessageKeys.CATALOG_CHILD); Element [] childNames = XMLHelper.getElementsInNS(childElement, ISoapMessageKeys.CATALOG_CHILD_DISP_NAME); if(childNames!=null) { List itemNames = new ArrayList(); for (int j = 0; j < childNames.length; ++j) { String itemName = XMLHelper.getElementValue(childNames[j]); itemNames.add(itemName); } itemsMap.put(ctgName,itemNames); } } }
- Сделайте вызов из метода doView() нового добавленного портлета, чтобы получить число элементов:
public void doView(PortletRequest request, PortletResponse response) throws PortletException, IOException { // Set the MIME type for the render response WPSContext context = null; PortletSession session = request.getPortletSession(); context = getWPSContext(request); HashMap hm = new HashMap(); WPCMediator mediator = WPCMediator.getInstance(); try { hm = mediator.getItems(context); hierarchy = mediator.getCatalogs(context); } catch (WPCMediatorException e) { // TODO Auto-generated catch block e.printStackTrace(); } session.setAttribute(ITEMLIST,hm); }
- Создайте страницу JSP для извлечения атрибутов и вывода значений:
<% PortletSession portletSession = portletRequest.getPortletSession(); CategoryHierarchy[] hierarchy = (CategoryHierarchy[])session.getAttribute (MyPortletProjectPortlet.AVAILABLE_CATALOGS); HashMap hm = (HashMap)session.getAttribute (MyPortletProjectPortlet.ITEMLIST); Iterator itAtt = hm.entrySet().iterator(); %> <table border="0"> <% while(itAtt.hasNext()) { Map.Entry mapEntry = (Map.Entry) itAtt.next(); String catalogName = (String)mapEntry.getKey(); List itemNames = (ArrayList)mapEntry.getValue(); out.println("<tr><td>"+ catalogName+"</td>"); List itemIds =(List) hm.get(catalogName); int noOfItems = itemIds.size(); out.println("<td>"+noOfItems+"</td></tr>"); } %>
Последнее изменение: 12 Mar 2019