Hi Freeman!

Freeman Fang пишет:
Please append your whole wsdl


Ok. Lets simplify our task for the best understanding important things.

I've created simple service MyService and written MyServiceImpl.

Here is my service.wsdl:

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/";
    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/";
    xmlns:tns="http://mycompany/My";
    xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/";
    xmlns:xmime="http://www.w3.org/2005/05/xmlmime";
    xmlns:xsd="http://www.w3.org/2001/XMLSchema";
    xmlns:ns="http://schemas.xmlsoap.org/soap/encoding/";
    targetNamespace="http://mycompany/My";>
    <wsdl:types>
        <xsd:schema targetNamespace="http://mycompany/My";
attributeFormDefault="qualified" elementFormDefault="qualified">
            <xsd:element name="RequestMessage">
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:element name="input"
                            type="xsd:string" />
                        <xsd:element name="input2"
type="xsd:string" />
                    </xsd:sequence>
                </xsd:complexType>
            </xsd:element>
            <xsd:element name="ResponseMessage">
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:element name="output"
                            type="xsd:string" />
                        <xsd:element name="output2"
                            type="xsd:string" />
                    </xsd:sequence>
                </xsd:complexType>
            </xsd:element>
        </xsd:schema>
    </wsdl:types>

    <wsdl:message name="requestMessage">
        <wsdl:part name="request"
            element="tns:RequestMessage">
        </wsdl:part>
    </wsdl:message>
    <wsdl:message name="responseMessage">
        <wsdl:part name="result"
            element="tns:ResponseMessage">
        </wsdl:part>
    </wsdl:message>

    <wsdl:portType name="MyServiceInterface">
        <wsdl:operation name="getInfo">
            <wsdl:input message="tns:requestMessage">
            </wsdl:input>
            <wsdl:output message="tns:responseMessage">
            </wsdl:output>
        </wsdl:operation>
    </wsdl:portType>

    <wsdl:binding name="MyServicePortBinding"
        type="tns:MyServiceInterface">
        <soap:binding style="document"
            transport="http://schemas.xmlsoap.org/soap/http"; />
        <wsdl:operation name="getInfo">
            <soap:operation soapAction="" />
            <wsdl:input>
                <soap:body use="literal" />
            </wsdl:input>
            <wsdl:output>
                <soap:body use="literal" />
            </wsdl:output>
        </wsdl:operation>
    </wsdl:binding>

    <wsdl:service name="MyService">
        <wsdl:port name="MyServicePort"
            binding="tns:MyServicePortBinding">
            <soap:address location="http://localhost:8192/myservice/"; />
        </wsdl:port>
    </wsdl:service>
</wsdl:definitions>



   And here is MyServiceImpl:

package mycompany.my;

import javax.jws.WebService;

@WebService(serviceName="MyService",
                targetNamespace="http://myservice/My";,
                portName="MyServicePort",
                endpointInterface="mycompany.my.MyServiceInterface")
public class MyServiceImpl implements MyServiceInterface{

        public ResponseMessage getInfo(RequestMessage request) {
                ResponseMessage responseMessage = new ResponseMessage();
                responseMessage.setOutput(request.getInput().concat("!"));
                responseMessage.setOutput2(request.getInput2().concat("!"));    
      
                return responseMessage;
        }

}



       And this is my CxfBcProviderConsumerTest:

package mycompany.my;

import java.net.URL;

import javax.xml.namespace.QName;

import org.apache.cxf.endpoint.Endpoint;
import org.apache.cxf.endpoint.Server;
import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
import org.apache.cxf.service.model.ServiceInfo;
import org.apache.servicemix.tck.SpringTestSupport;
import org.springframework.context.support.AbstractXmlApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class CxfBcProviderConsumerTest extends SpringTestSupport {

    public void testBridge() throws Exception {

        URL wsdl = getClass().getResource("/service.wsdl");
        // start external service
        JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();
        factory.setServiceClass(MyServiceInterface.class);
        factory.setServiceBean(new MyServiceImpl());
        factory.setWsdlURL(wsdl.toString());
        factory.setServiceName(new QName("http://mycompany/My";,
                "MyService"));
        //factory.setBindingId("http://schemas.xmlsoap.org/wsdl/soap12/";);
        String address = "http://localhost:9001/bridgetest";;
        factory.setAddress(address);
        Server server = factory.create();
        Endpoint endpoint = server.getEndpoint();
        endpoint.getInInterceptors().add(new LoggingInInterceptor());
        endpoint.getOutInterceptors().add(new LoggingOutInterceptor());
        ServiceInfo service = endpoint.getEndpointInfo().getService();
        assertNotNull(service);

        // start external client

        assertNotNull(wsdl);
        MyService service1 = new MyService(wsdl,
                        new QName("http://mycompany/My";, "MyService"));
        MyServiceInterface port = service1.getMyServicePort();


        RequestMessage requestMessage = new RequestMessage();
        requestMessage.setInput("input1");
        requestMessage.setInput2("input2");
                
                ResponseMessage responseMessage = port.getInfo(requestMessage);

                
                System.err.println(responseMessage.getOutput());
                System.err.println(responseMessage.getOutput2());
                

        assertNotNull(responseMessage);

    }

    @Override
    protected AbstractXmlApplicationContext createBeanFactory() {
        return new ClassPathXmlApplicationContext(
                "my_cxf_provider_consumer_bridge.xml");
    }

}


-----------------my_cxf_provider_consumer_bridge.xml----------------

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:sm="http://servicemix.apache.org/config/1.0";
       xmlns:cxfbc="http://servicemix.apache.org/cxfbc/1.0";
       xmlns:my="http://mycompany/My";>

  <sm:container id="jbi" embedded="true">
    <sm:endpoints>
      <cxfbc:consumer wsdl="/service.wsdl"
                      service="my:MyService"
                      endpoint="MyPort"
                      targetEndpoint="MyPortProxy"
                      targetService="my:MyService"
                      targetInterface="my:MyServiceInterface">
          <cxfbc:inInterceptors>
            <bean class="org.apache.cxf.interceptor.LoggingInInterceptor"/>
          </cxfbc:inInterceptors>
          <cxfbc:outInterceptors>
<bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"/>
          </cxfbc:outInterceptors>
          <cxfbc:inFaultInterceptors>
            <bean class="org.apache.cxf.interceptor.LoggingInInterceptor"/>
          </cxfbc:inFaultInterceptors>
          <cxfbc:outFaultInterceptors>
<bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"/>
          </cxfbc:outFaultInterceptors>
      </cxfbc:consumer>

      <cxfbc:provider wsdl="/service.wsdl"
                      locationURI="http://localhost:9001/bridgetest";
                      service="my:MyService"
                      endpoint="MyPortProxy"
                      interfaceName="my:MyServiceInterface"
                     >
          <cxfbc:inInterceptors>
            <bean class="org.apache.cxf.interceptor.LoggingInInterceptor"/>
          </cxfbc:inInterceptors>
          <cxfbc:outInterceptors>
<bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"/>
          </cxfbc:outInterceptors>
          <cxfbc:inFaultInterceptors>
            <bean class="org.apache.cxf.interceptor.LoggingInInterceptor"/>
          </cxfbc:inFaultInterceptors>
          <cxfbc:outFaultInterceptors>
<bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"/>
          </cxfbc:outFaultInterceptors>
      </cxfbc:provider>
    </sm:endpoints>

  </sm:container>

</beans>



When I start test I faced new issue (Exception):

testBridge(mycompany.my.CxfBcProviderConsumerTest) Time elapsed: 0.515 sec <<< ERROR! org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 4 in XML document from class path resource [my_cxf_provider_consumer_bridge.xml] is invalid; nested exception is org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'beans'. Caused by: org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'beans'. at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
        at org.apache.xerces.util.ErrorHandlerWrapper.error(Unknown Source)
        at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
        at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
at org.apache.xerces.impl.xs.XMLSchemaValidator.handleStartElement(Unknown Source) at org.apache.xerces.impl.xs.XMLSchemaValidator.startElement(Unknown Source) at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source) at org.apache.xerces.impl.XMLNSDocumentScannerImpl$NSContentDispatcher.scanRootElementHook(Unknown Source) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
        at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
        at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
        at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
        at org.apache.xerces.parsers.DOMParser.parse(Unknown Source)
        at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source)
at org.springframework.beans.factory.xml.DefaultDocumentLoader.loadDocument(DefaultDocumentLoader.java:76) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:351) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:303) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:280) at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:131) at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:147) at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:173) at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:112) at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:79) at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:100) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:313) at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:91) at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:75) at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:65) at mycompany.my.CxfBcProviderConsumerTest.createBeanFactory(CxfBcProviderConsumerTest.java:81) at org.apache.servicemix.tck.SpringTestSupport.setUp(SpringTestSupport.java:65)
...


-----xbean.xml----
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:cxfse="http://servicemix.apache.org/cxfse/1.0";>
    <cxfse:endpoint>
        <cxfse:pojo>
          <bean class="mycompany.my.MyServiceImpl" />
        </cxfse:pojo>
    </cxfse:endpoint>
</beans>




I used ServiceMix's CxfBcProviderConsumerTest as example.


Thanks in advance!
Truly yours, Ivan Pryvalov.

Reply via email to