Donnerstag, 2. Dezember 2010

generate axis 1.4 service client and use it as spring bean

Musste seit langem mal wieder einen rpc/encoded WebService anbinden. Das mag cxf und axis2 mal gar nicht, also bin ich wieder zurück auf axis 1.4. Da klappt das wunderbar! Generiert wird mit Maven:

project .... >

  <build>     <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>axistools-maven-plugin</artifactId>
        <version>1.4</version>
        <dependencies>
          <dependency>
            <groupId>org.apache.axis</groupId>
            <artifactId>axis</artifactId>
            <version>1.4</version>
          </dependency>
        </dependencies>
        <configuration>
          <wsdlFiles>
            <wsdlFile>jirasoapservice-v2.wsdl</wsdlFile>
          </wsdlFiles>
        </configuration>
        <executions>
          <execution>
            <id>wsdl2java-generation</id>
            <phase>generate-sources</phase>
            <goals>
              <goal>wsdl2java</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  <dependencies>
    <dependency>
      <groupId>org.apache.axis</groupId>
      <artifactId>axis</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.axis</groupId>
      <artifactId>axis-jaxrpc</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.axis</groupId>
      <artifactId>axis-saaj</artifactId>
    </dependency>
    <dependency>
      <groupId>axis</groupId>
      <artifactId>axis-wsdl4j</artifactId>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <scope>test</scope>
    </dependency>
    </dependencies>
  </project>

Als Ergebnis gibt es dann unter anderem Locator: JiraSoapServiceServiceLocator. Und diesen sollte man verwenden, um an die Service Instanz zu kommen:

<bean id="Locator" class="de.cirquent.JiraSoapServiceServiceLocator" >
<property name="JirasoapserviceV2EndpointAddress" value="https://jira.cirquent.de/jira/rpc/soap/jirasoapservice-v2?wsdl" />
</bean>
<bean id="JiraSoapService" factory-bean="Locator" factory-method="getJirasoapserviceV2" >
</bean>
<bean id="RequirementsFinder" class="de.cirquent.jira.MSARequirementsImpl" >
<constructor-arg ref="JiraSoapService" />
</bean>
Sowit so gut, so hatte ich das recherchiert und auch einigermaßen in Erinnerung behalten. Leider habe ich eine häßliche ClassNotFound für JiraSoapService bekommen.

Ich habe lange nach dem Problem gesucht und bin zuletzt zum Entschluß gekommen, dass es am Konstruktor des MSARequirementsImpl  gelegen hat. Ich habe den Parameter JiraSoapService als final deklariert. Das geht wohl gar nicht. Fragt mich jetzt nicht warum, ich halte das auch für sehr unlogisch! Aber seit das final weg ist, klappts?!?!

Naja, falls Ihr also mal sowas komisches habt, überprüft Eure finals ;-) 

Und entschuldigt diese Chaos daoben, dieser Efditor its ja mal .... von wegen WYSIWIG!


Keine Kommentare:

Kommentar veröffentlichen