Il semble que vous ayez déjà trouvé une solution à votre problème, mais je publierai des étapes détaillées pour les lecteurs potentiels. J'espère que cela aidera aussi à améliorer votre solution, car je ne suis pas sûr que votre problème ne soit pas dans la dénomination de l'entité.
Préalables:
- Ant a été installé
- Axis2 a été téléchargé et variable d'environnement AXIS_HOME était correctement ensemble dans les variables d'environnement
- Toute application est disponible pour le déploiement de l'axe. Dans mon cas, j'ai utilisé Tomcat
Apache Tomcat/7.0.41
. Pour déployer l'axe, il suffit d'ajouter le dossier de l'axe précédemment téléchargé dans le dossier TOMCAT_HOME\webapps
.
J'ai utilisé la même implémentation de bean et de service. Alors:
Case.java
package server;
import java.io.Serializable;
public class Case implements Serializable {
private static final long serialVersionUID = -1549174508068625157L;
private String id;
public Case() {
}
public Case(String id) {
this.id = id;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
CaseService.java
package server;
interface CaseService {
String hello(String message);
Case test();
}
CaseServiceImpl.java
package server;
public class CaseServiceImpl implements CaseService {
//This one works
@Override
public String hello(String message) {
return message;
}
//This one doesn't show up
@Override
public Case test() {
return new Case("TR-1");
}
}
Une fois que vous avez créé cette infrastructure, vous pouvez générer wsdl en fonction de votre interface de service. Accédez au niveau supérieur au dossier dans lequel sont stockés les fichiers compilés (Case.class
, CaseService.class
, CaseServiceImpl.class
).Dans notre cas, c'est:
et exécuter la commande suivante:
%AXIS2_HOME%\bin\java2wsdl.bat -cp . -cn server.CaseService -of CaseService.wsdl
Le résultat sera suit:
Et nouveau fichier CaseService.wsdl
sera créé.
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:ns="http://server" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ax21="http://server/xsd" xmlns:ns1="http://org.apache.axis2/xsd" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" targetNamespace="http://server">
<wsdl:types>
<xs:schema xmlns:ax22="http://server/xsd" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://server">
<xs:import namespace="http://server/xsd"/>
<xs:element name="test">
<xs:complexType>
<xs:sequence/>
</xs:complexType>
</xs:element>
<xs:element name="testResponse">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="return" nillable="true" type="ax22:Case"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="hello">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="args0" nillable="true" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="helloResponse">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="return" nillable="true" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
<xs:schema attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://server/xsd">
<xs:complexType name="Case">
<xs:sequence>
<xs:element minOccurs="0" name="id" nillable="true" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
</wsdl:types>
<wsdl:message name="testRequest">
<wsdl:part name="parameters" element="ns:test"/>
</wsdl:message>
<wsdl:message name="testResponse">
<wsdl:part name="parameters" element="ns:testResponse"/>
</wsdl:message>
<wsdl:message name="helloRequest">
<wsdl:part name="parameters" element="ns:hello"/>
</wsdl:message>
<wsdl:message name="helloResponse">
<wsdl:part name="parameters" element="ns:helloResponse"/>
</wsdl:message>
<wsdl:portType name="CaseServicePortType">
<wsdl:operation name="test">
<wsdl:input message="ns:testRequest" wsaw:Action="urn:test"/>
<wsdl:output message="ns:testResponse" wsaw:Action="urn:testResponse"/>
</wsdl:operation>
<wsdl:operation name="hello">
<wsdl:input message="ns:helloRequest" wsaw:Action="urn:hello"/>
<wsdl:output message="ns:helloResponse" wsaw:Action="urn:helloResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="CaseServiceSoap11Binding" type="ns:CaseServicePortType">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
<wsdl:operation name="test">
<soap:operation soapAction="urn:test" style="document"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="hello">
<soap:operation soapAction="urn:hello" style="document"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:binding name="CaseServiceSoap12Binding" type="ns:CaseServicePortType">
<soap12:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
<wsdl:operation name="test">
<soap12:operation soapAction="urn:test" style="document"/>
<wsdl:input>
<soap12:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap12:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="hello">
<soap12:operation soapAction="urn:hello" style="document"/>
<wsdl:input>
<soap12:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap12:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:binding name="CaseServiceHttpBinding" type="ns:CaseServicePortType">
<http:binding verb="POST"/>
<wsdl:operation name="test">
<http:operation location="test"/>
<wsdl:input>
<mime:content type="application/xml" part="parameters"/>
</wsdl:input>
<wsdl:output>
<mime:content type="application/xml" part="parameters"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="hello">
<http:operation location="hello"/>
<wsdl:input>
<mime:content type="application/xml" part="parameters"/>
</wsdl:input>
<wsdl:output>
<mime:content type="application/xml" part="parameters"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="CaseService">
<wsdl:port name="CaseServiceHttpSoap11Endpoint" binding="ns:CaseServiceSoap11Binding">
<soap:address location="http://localhost:8080/axis2/services/CaseService"/>
</wsdl:port>
<wsdl:port name="CaseServiceHttpSoap12Endpoint" binding="ns:CaseServiceSoap12Binding">
<soap12:address location="http://localhost:8080/axis2/services/CaseService"/>
</wsdl:port>
<wsdl:port name="CaseServiceHttpEndpoint" binding="ns:CaseServiceHttpBinding">
<http:address location="http://localhost:8080/axis2/services/CaseService"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
Nous sommes maintenant prêts à générer des composants WS. Dans le dossier où CaseService.wsdl
a été généré exécuter la commande suivante:
%AXIS2_HOME%\bin\WSDL2Java -uri CaseService.wsdl -d adb -s -ss -sd -ssi -o service
Le résultat sera suit:
Et nouveau dossier service
sera généré. Cette commande génère également un squelette pour vos méthodes WS qui devrait être implémenté. Donc, ouvrez CaseServiceSkeleton.java
et implémentez les méthodes hello
et test
. Résultat devrait être quelque chose comme ça:
package server;
public class CaseServiceSkeleton implements CaseServiceSkeletonInterface {
public HelloResponse hello(Hello hello0) {
CaseService caseService = new CaseServiceImpl();
String hello = caseService.hello(hello0.getArgs0());
HelloResponse helloResponse = new HelloResponse();
helloResponse.set_return(hello);
return helloResponse;
}
public TestResponse test(Test test2) {
CaseService caseService = new CaseServiceImpl();
Case test = caseService.test();
server.xsd.Case aCase = new server.xsd.Case();
aCase.setId(test.getId());
TestResponse testResponse = new TestResponse();
testResponse.set_return(aCase);
return testResponse;
}
}
Parce que vous avez une dépendance à l'égard CaseService
, CaseServiceImpl
et Case
(qui ont été générés au cours de l'étape 1) copier ces fichiers dans le même dossier dans lequel CaseServiceSkeleton.java
a été généré. Vous êtes maintenant prêt à générer le fichier *.aar
. Il sera utilisé pour le déploiement WS. Accédez au dossier service
nouvellement généré et exécuter la commande ant:
ant -buildfile build.xml
Le résultat sera suit:
Et dans le dossier build\lib\
sera créé CaseService.aar
. Pour une raison quelconque, Test.class
n'a pas été automatiquement inclus dans le fichier *.aar
, il est donc nécessaire de l'ajouter manuellement - copiez simplement Test.class
du dossier build/classes
dans le dossier CaseService.aar
nouvellement généré dans le dossier server
. Après toutes ces étapes dossier CaseService.aar\server
devrait ressembler à ça:
Maintenant, vous pouvez déployer sur l'axe - il suffit de le copier sur WEB-INF\services\
dans l'axe application web. Celui que vous démarrez le nouveau serveur d'applications doit apparaître. Allez au http://your_host:your_port/axis_application_name/services/listServices
. Si le déploiement a la page suivante devrait apparaître avec succès:
service
Invocation
Il y a beaucoup de façons comment invoce les services fournis. Dans notre cas, nous utiliserons les talons de client générés.Pour générer le client s'il vous plaît utilisez la commande suivante à partir du dossier avec le fichier wsdl:
%AXIS2_HOME%\bin\WSDL2Java -uri CaseService.wsdl -d adb –o client
Le résultat sera suit:
Cette commande va générer le dossier src avec deux fichiers: CaseServiceStub.java
et CaseServiceCallbackHandler.java
. Ces fichiers seront utilisés par l'application cliente. Maintenant, nous sommes prêts pour la création de l'application client lui-même:
Client.java
package client;
import org.apache.axis2.AxisFault;
public class Client {
public static void main(String... args) {
try {
CaseServiceStub stub = new CaseServiceStub("http://localhost:8080/axis/services/CaseService");
invokeHelloMethod(stub);
invokeTestMethod(stub);
} catch (AxisFault axisFault) {
axisFault.printStackTrace();
}
}
public static void invokeHelloMethod(CaseServiceStub stub) {
try {
CaseServiceStub.Hello request = new CaseServiceStub.Hello();
request.setArgs0("Hello World");
CaseServiceStub.HelloResponse response = stub.hello(request);
System.out.println("Hello method says: " + response.get_return());
} catch (java.rmi.RemoteException e) {
e.printStackTrace();
}
}
public static void invokeTestMethod(CaseServiceStub stub) {
try {
CaseServiceStub.Test request = new CaseServiceStub.Test();
CaseServiceStub.TestResponse response = stub.test(request);
System.out.println("Test method says: " + response.get_return().getId());
} catch (java.rmi.RemoteException e) {
e.printStackTrace();
}
}
}
Ne pas oublier de changer WS url lors de la création de l'objet CaseServiceStub
. En résultat après l'exécution de cette classe, vous devez obtenir la sortie suivante:
Hello method says: Hello World
Test method says: TR-1
Espérons que cela aide les gens à exécuter votre exemple :)
Pourquoi ce downvoted? –