Yes, I have recently dropped the spring-ws 1.5.7 libraries into
framework/base/lib and created a POX client to call an external webservice. 
No more messing with wsdl2java for simple services, just xpath expressions
to get the data:

package uk.co.dh.hpi;

import java.io.StringReader;
import java.util.Map;

import javax.xml.transform.dom.DOMResult;
import javax.xml.transform.stream.StreamSource;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;

import org.ofbiz.base.util.Debug;
import org.ofbiz.base.util.UtilProperties;
import org.ofbiz.service.DispatchContext;
import org.ofbiz.service.ServiceUtil;
import org.springframework.ws.client.core.WebServiceTemplate;

public class WebServiceClient {
        
        public static final String customerCode = 
                UtilProperties.getPropertyValue("DHConfig.properties",
"hpi.CustomerCode");

        public static final String initials = 
                UtilProperties.getPropertyValue("DHConfig.properties", 
"hpi.Initials");

        public static final String password = 
                UtilProperties.getPropertyValue("DHConfig.properties", 
"hpi.Password");

        public static final String uri = 
                UtilProperties.getPropertyValue("DHConfig.properties", 
"hpi.URI");
        
    private static String makeMessage(String vrm, String vin) {
        
        String vrmElement = "";
        String vinElement = "";
        
        if (vrm != null && !(vrm.trim().length() == 0))
                vrmElement = "<hpi:Vrm>" + vrm + "</hpi:Vrm>";
        
        if (vin != null && !(vin.trim().length() == 0))
                vinElement = "<hpi:Vin>" + vin + "</hpi:Vin>";
        
        return
                "<hpi:enquire xmlns:hpi=\"urn:enquiry\">" +
                        "<hpi:Authentication>" +
                                "<hpi:CustomerDetails>" +
                                        "<hpi:CustomerCode>" + customerCode + 
"</hpi:CustomerCode>" +
                                        "<hpi:Initials>" + initials + 
"</hpi:Initials>" +
                                        "<hpi:Password>" + password + 
"</hpi:Password>" +
                                "</hpi:CustomerDetails>" +
                        "</hpi:Authentication>" +
                        "<hpi:Request>" +
                                "<hpi:Asset>" +
                                        vrmElement + 
                                        vinElement + 
                                "</hpi:Asset>" +
                                "<hpi:Product>" +
                                        "<hpi:Code>HPI01</hpi:Code>" +
                                "</hpi:Product>" +
                        "</hpi:Request>" +
                "</hpi:enquire>";
    }

        public static Map doHPI01(DispatchContext ctx, Map context) {

        String vrm = (String) context.get("vrm");
        String vin = (String) context.get("vin");
        
        Map resultMap = ServiceUtil.returnSuccess();
                DOMResult result;

                try {
                        WebServiceTemplate webServiceTemplate = new 
WebServiceTemplate();
                        
                        StreamSource source = new StreamSource(new 
StringReader(makeMessage(vrm,
vin)));
                        result = new DOMResult();
                        webServiceTemplate.sendSourceAndReceiveToResult(uri, 
source, result);

                        XPathFactory factory = XPathFactory.newInstance();
                        XPath xPath = factory.newXPath();

                        XPathExpression expr;
                        
                        expr =
xPath.compile("/EnquiryResponse/RequestResults/Asset/AssetIdentification/Vrm/text()");
                        resultMap.put("responseVrm", 
expr.evaluate(result.getNode()));

                        expr =
xPath.compile("/EnquiryResponse/RequestResults/Asset/AssetIdentification/Vin/text()");
                        resultMap.put("responseVin", 
expr.evaluate(result.getNode()));                  
                        
...                     
...
...
                } catch (XPathExpressionException e) {
                        Debug.logError(e, "Error running Hpi Lookup - ",
WebServiceClient.class.getName());
            return ServiceUtil.returnError("Error running Hpi Lookup" + e);
                }
                resultMap.put("responseXml", 
DOMWriter.printNode(result.getNode(), true));
                
        return resultMap;
    }
    
}


MarioF wrote:
> 
> Hi all,
> 
> I read a lot of information in this excellent mail list about Axis2 and
> OFBiz. I know that it is possible to expose OFBiz services using Axis2,
> but is it possible to call external services in Axis2 from OFBiz?
> 
> Thanks in advance,
> Mario.
> 

-- 
View this message in context: 
http://www.nabble.com/Is-it-possible-to-call-external-services-from-OFBiz-to-Axis2--tp25330704p25335191.html
Sent from the OFBiz - User mailing list archive at Nabble.com.

Reply via email to