2015-03-06 4 views
21

से अलग संकलित स्कीमा यदि कई वेबसाइसेस में उपयोग की जाने वाली बड़ी स्कीमा है, तो मैं डब्लूएसडीएल संकलन से एक्सएसडी संकलन को अलग करना चाहता हूं। एक सरल उदाहरण में, एक ही चरण में संकलन काम करता है:जेएक्स-डब्ल्यूएस: डब्लूएसडीएल

$ wsimport -verbose service.wsdl 
parsing WSDL... 

Generating code... 

org/example/wsdl/mysvc/MySvcPortType.java 
org/example/wsdl/mysvc/MySvcService.java 
org/example/ns1/Element1.java 
org/example/ns1/ObjectFactory.java 
org/example/ns1/package-info.java 
... 

XSD संकलन और जिसके परिणामस्वरूप प्रकरण फ़ाइल का उपयोग कर काम नहीं करता:

$ wsimport -b schema3.episode service.wsdl 
parsing WSDL... 

[ERROR] Schema descriptor {http://www.example.org/ns1}element1 in 
message part "part1" is not defined and could not be bound to Java. 
Perhaps the schema descriptor {http://www.example.org/ns1}element1 is 
not defined in the schema imported/included in the WSDL. You can 
either add such imports/includes or run wsimport and provide the 
schema location using -b switch. line 9 of 
file:...jaxepisode_element/service.wsdl 

तो मैं कैसे wsimport में precompiled स्कीमा का उपयोग कर सकते हैं?

परिशिष्ट: जब एक और स्कीमा कार्यों में शामिल हैं और नए संकलन (d3.jar schema3 + META-INF/धूप में jaxb.episode रूप schema3.episode से genrated कक्षाएं शामिल हैं) से बचा जाता है प्रकरण का उपयोग करना:

$ xjc schema4.xsd d3.jar -extension 
parsing a schema... 

compiling a schema... 

org/example/ns2/Element2.java 
org/example/ns2/ObjectFactory.java 
org/example/ns2/package-info.java 

precompiled पैकेज के बिना:

$ xjc schema4.xsd -extension 
parsing a schema... 
compiling a schema... 
org/example/ns1/Element1.java 
org/example/ns1/ObjectFactory.java 
org/example/ns1/package-info.java 
org/example/ns2/Element2.java 
org/example/ns2/ObjectFactory.java 
org/example/ns2/package-info.java 

डबल्यूएसडीएल:

<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://example.org/wsdl/MySvc" xmlns:ns="http://www.example.org/ns1" targetNamespace="http://example.org/wsdl/MySvc" name="MySvc"> 
    <types> 
    <xsd:schema> 
     <xsd:import namespace="http://www.example.org/ns1" schemaLocation="schema3.xsd"/> 
    </xsd:schema> 
    </types> 
    <message name="myOpRequest"> 
    <part name="part1" element="ns:element1"/> 
    </message> 
    <message name="myOpReply"> 
    <part name="part1" element="ns:element1"/> 
    </message> 
    <portType name="MySvcPortType"> 
    <operation name="myOp"> 
     <input name="input1" message="tns:myOpRequest"/> 
     <output name="output1" message="tns:myOpReply"/> 
    </operation> 
    </portType> 
    <binding name="MySvcBinding" type="tns:MySvcPortType"> 
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> 
    <operation name="myOp"> 
     <soap:operation/> 
     <input name="input1"> 
     <soap:body use="literal"/> 
     </input> 
     <output name="output1"> 
     <soap:body use="literal"/> 
     </output> 
    </operation> 
    </binding> 
    <service name="MySvcService"> 
    <port name="MySvcPort" binding="tns:MySvcBinding"> 
     <soap:address location="http://localhost:8080/"/> 
    </port> 
    </service> 
</definitions> 

schema3.xsd:

<schema 
    xmlns="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://www.example.org/ns1" 
    xmlns:tns="http://www.example.org/ns1" 
    elementFormDefault="qualified"> 
    <element name="element1" > 
    <complexType > 
     <sequence> 
       <element name="name" type="string" /> 
     </sequence> 
    </complexType> 
    </element> 
</schema> 

schema4.xsd:

<schema 
    xmlns="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://www.example.org/ns2" 
    xmlns:tns="http://www.example.org/ns2" 
    xmlns:ns1="http://www.example.org/ns1" 
    elementFormDefault="qualified"> 

    <import namespace="http://www.example.org/ns1" schemaLocation="schema3.xsd"/> 
    <element name="element2" > 
     <complexType > 
     <sequence> 
      <element ref="ns1:element1" /> 
     </sequence> 
     </complexType> 
    </element> 
</schema> 

उत्पन्न प्रकरण फ़ाइल:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<bindings version="2.1" xmlns="http://java.sun.com/xml/ns/jaxb"> 
    <bindings scd="x-schema::tns" xmlns:tns="http://www.example.org/ns1"> 
    <schemaBindings map="false"> 
     <package name="org.example.ns1"/> 
    </schemaBindings> 
    <bindings scd="tns:element1"> 
     <class ref="org.example.ns1.Element1"/> 
    </bindings> 
    </bindings> 
</bindings> 
+0

क्या आपने [यह प्रश्न] देखा है (http://stackoverflow.com/q/1682479/1064325), और [यह धागा] (http://www.coderanch.com/t/460978/Web-Services/ जावा/डबल्यूएसडीएल-सेवा)? – falsarella

+1

मैंने उन्हें पहले नहीं देखा है लेकिन उन्हें पढ़ने के बाद मुझे नहीं लगता कि समाधान मेरे मामले में लागू हैं। कोडरंच-ट्र्रावाड के बारे में: मैं पहले से ही अपने संदेशों के लिए तत्वों का उपयोग करता हूं, प्रकार नहीं। ओह SO प्रश्न का पुन: प्रयास करना: मेरे पास 2001 स्कीमा नेमस्पेस है, मेरे पास मेरे नाम में कोई नेमस्पेस नहीं है- विशेषताएँ और 'टाइप = "स्ट्रिंग" 'सही है क्योंकि xmls स्कीमा डिफ़ॉल्ट नामस्थान है। – Drunix

उत्तर

6

आप Maven का उपयोग प्रत्येक के लिए अलग और अपाचे CXF साथ उत्पन्न कर सकते हैं।

मैं एक उदाहरण है कि आप मदद कर सकता है।

गुण:

<properties> 
    <apache.cxf.version>3.0.4</apache.cxf.version> 
    <cxf-codegen-plugin.version>3.0.4</cxf-codegen-plugin.version> 
    <cxf-xjc-plugin.version>3.0.3</cxf-xjc-plugin.version> 
</properties> 

निर्भरता:

<dependencies> 
    <dependency> 
     <groupId>org.apache.cxf</groupId> 
     <artifactId>cxf-rt-frontend-jaxws</artifactId> 
     <version>${apache.cxf.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>org.apache.cxf</groupId> 
     <artifactId>cxf-rt-transports-http</artifactId> 
     <version>${apache.cxf.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>org.apache.cxf</groupId> 
     <artifactId>cxf-rt-databinding-jaxb</artifactId> 
     <version>${apache.cxf.version}</version> 
     <exclusions> 
      <exclusion> 
       <groupId>com.sun.xml.bind</groupId> 
       <artifactId>jaxb-core</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>com.sun.xml.bind</groupId> 
       <artifactId>jaxb-impl</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>xalan</groupId> 
       <artifactId>xalan</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 
</dependencies> 

भागो -> mvn साफ स्थापित -Pgenerates-NFE-सेवाओं

<profile> 
     <id>generates-nfe-services</id> 
     <activation> 
      <property> 
       <name>generates-nfe-services</name> 
      </property> 
     </activation> 
     <build> 
      <plugins> 
       <plugin> 
        <groupId>org.apache.cxf</groupId> 
        <artifactId>cxf-codegen-plugin</artifactId> 
        <executions> 
         <execution> 
          <id>generate-sources</id> 
          <phase>generate-sources</phase> 
          <configuration> 
           <!--sourceRoot>${project.build.directory}/generated-sources</sourceRoot--> 
           <sourceRoot>${basedir}/src/main/java</sourceRoot> 
           <defaultOptions> 
            <extraargs> 
             <extraarg>-validate</extraarg> 
             <extraarg>-client</extraarg> 
             <extraarg>-verbose</extraarg> 
             <extraarg>-xjc-npa</extraarg> 
             <extraarg>-xjc-verbose</extraarg> 
             <extraarg>-xjc-extension</extraarg> 
             <extraarg>-exsh</extraarg> 
             <extraarg>true</extraarg> 
             <extraarg>-keep</extraarg> 
            </extraargs> 
           </defaultOptions> 
           <wsdlOptions> 
            <wsdlOption> 
             <wsdl> 
              ${basedir}/src/main/wsdl/br/gov/rs/sefaz/nfe/homologacao/NfeConsultaCadastro.wsdl 
             </wsdl> 
             <extraargs> 
              <extraarg>-p</extraarg> 
              <extraarg>br.gov.rs.sefaz.nfe.consulta.cadastro</extraarg> 
             </extraargs> 
            </wsdlOption> 
           </wsdlOptions> 
          </configuration> 
          <goals> 
           <goal>wsdl2java</goal> 
          </goals> 
         </execution> 
        </executions> 
       </plugin> 
      </plugins> 
     </build> 
    </profile> 

भागो -> mvn साफ स्थापित - Pgenerates-layouts-nfe

<profile> 
     <id>generates-layouts-nfe</id> 
     <activation> 
      <property> 
       <name>generates-layouts-nfe</name> 
      </property> 
     </activation> 
     <build> 
      <plugins> 
       <plugin> 
        <groupId>org.apache.cxf</groupId> 
        <artifactId>cxf-xjc-plugin</artifactId> 
        <version>${cxf-xjc-plugin.version}</version> 
        <executions> 
         <execution> 
          <id>generate-sources</id> 
          <phase>generate-sources</phase> 
          <goals> 
           <goal>xsdtojava</goal> 
          </goals> 
          <configuration> 
           <!--sourceRoot>${basedir}/target/generated-sources</sourceRoot--> 
           <sourceRoot>${basedir}/src/main/java</sourceRoot> 
           <xsdOptions> 
            <xsdOption> 
             <xsd>${basedir}/src/main/schemas/nfe/PL_008f/leiauteConsSitNFe_v3.10.xsd 
             </xsd> 
             <packagename>br.inf.portalfiscal.nfe.v310.leiaute.consulta.situacao.nfe 
             </packagename> 
             <extension>true</extension> 
             <extensionArgs> 
              <!--extensionArg>-npa</extensionArg--> 
              <extensionArg>-extension</extensionArg> 
             </extensionArgs> 
            </xsdOption> 
           </xsdOptions> 
          </configuration> 
         </execution> 
        </executions> 
       </plugin> 
      </plugins> 
     </build> 
    </profile> 

आप केवल एमएसडी उत्पन्न करने के लिए केवल wsdl उत्पन्न करने के लिए एक मेवेन प्रोजेक्ट बना सकते हैं।

नोट:

अपनी परियोजना उपयोग डबल्यूएसडीएल की आवश्यकता नहीं है, तो json-आराम-api पर स्विच करें।

आरईएसटी का उपयोग करें और खुश रहें। \ o/

मुझे उम्मीद है कि इससे मदद मिलती है।

+1

मुझे लगता है कि मैं सीएक्सएफ को आज़मा दूंगा। जेसन वास्तव में एक विकल्प नहीं है। – Drunix

संबंधित मुद्दे