Ich habe noch nie eine SOAP-Bibliothek in Java verwendet, daher entschuldige ich mich für die Neuigkeit dieser Frage.Erstellen eines SOAP-Clients in Java mit einer WSDL-Datei
Ich versuche, die SOAP-API von Tivoli Endpoint Manager zu nutzen. Ich habe die erforderlichen Klassen aus der WSDL-Datei erzeugt, die mit wsimport.exe (in der jdk bereitgestellt) bereitgestellt wird.
Jetzt bin ich mit einer Tonne von Klassen zur Verfügung gestellt, die ich nehme, sind die Informationen in XML-Format, aber ich bin mir nicht sicher, was ich mit ihnen zu tun habe. Ich habe die Dokumentation gelesen, aber es ist bestenfalls unscharf.
Die von wsimport generierten Klassen sind die folgenden:
Gemäß der Dokumentation arbeitet das folgende Perl-Code für die API
use SOAP::Lite;
#arguments: [hostname] [username] [password] [relevance expression]
#hostname only, e.g. ’example.com’ rather than ’http://example.com/webreports’
my $host = $ARGV[0];
my $username = SOAP::Data->name(’username’ => $ARGV[1]);
my $password = SOAP::Data->name(’password’ => $ARGV[2]);
my $expr = SOAP::Data->name(’relevanceExpr’ => $ARGV[3]);
my $service = SOAP::Lite -> uri(’http://’ . $host . ’/webreports?wsdl’)
-> proxy($host);
my $result = $service -> GetRelevanceResult($expr, $username, $password);
if($result->fault) {
print "faultcode: " . $result->faultcode . "\n";
print "faultstring: " . $result->faultstring . "\n";
}
else {
foreach my $answer ($result->valueof("//GetRelevanceResultResponse/a")) {
print $answer . "\n";
}
}
Frage Tivoli Abfrage: Was sind die gleichwertige SOAP-Client-Bibliotheken in Java? (Die, die ich gegoogled habe, sind so schwer 15mb +)
Wie würde ich den äquivalenten Java-Stub-Code für das Perl oben schreiben?
EDIT 1
Hier ist der Stub Code Ich denke, die die WebReportsService.java Klasse
package connect.tivoli;
import java.net.MalformedURLException;
import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import javax.xml.ws.WebEndpoint;
import javax.xml.ws.WebServiceClient;
import javax.xml.ws.WebServiceException;
import javax.xml.ws.WebServiceFeature;
/**
* This class was generated by the JAX-WS RI.
* JAX-WS RI 2.2.4-b01
* Generated source version: 2.2
*
*/
@WebServiceClient(name = "WebReportsService", targetNamespace = "http://schemas.bigfix.com/Relevance", wsdlLocation = "http://temwebreports/webreports?wsdl")
public class WebReportsService
extends Service
{
private final static URL WEBREPORTSSERVICE_WSDL_LOCATION;
private final static WebServiceException WEBREPORTSSERVICE_EXCEPTION;
private final static QName WEBREPORTSSERVICE_QNAME = new QName("http://schemas.bigfix.com/Relevance", "WebReportsService");
static {
URL url = null;
WebServiceException e = null;
try {
url = new URL("http://temwebreports/webreports?wsdl");
} catch (MalformedURLException ex) {
e = new WebServiceException(ex);
}
WEBREPORTSSERVICE_WSDL_LOCATION = url;
WEBREPORTSSERVICE_EXCEPTION = e;
}
public WebReportsService() {
super(__getWsdlLocation(), WEBREPORTSSERVICE_QNAME);
}
public WebReportsService(WebServiceFeature... features) {
super(__getWsdlLocation(), WEBREPORTSSERVICE_QNAME, features);
}
public WebReportsService(URL wsdlLocation) {
super(wsdlLocation, WEBREPORTSSERVICE_QNAME);
}
public WebReportsService(URL wsdlLocation, WebServiceFeature... features) {
super(wsdlLocation, WEBREPORTSSERVICE_QNAME, features);
}
public WebReportsService(URL wsdlLocation, QName serviceName) {
super(wsdlLocation, serviceName);
}
public WebReportsService(URL wsdlLocation, QName serviceName, WebServiceFeature... features) {
super(wsdlLocation, serviceName, features);
}
/**
*
* @return
* returns RelevancePortType
*/
@WebEndpoint(name = "RelevancePort")
public RelevancePortType getRelevancePort() {
return super.getPort(new QName("http://schemas.bigfix.com/Relevance", "RelevancePort"), RelevancePortType.class);
}
/**
*
* @param features
* A list of {@link javax.xml.ws.WebServiceFeature} to configure on the proxy. Supported features not in the <code>features</code> parameter will have their default values.
* @return
* returns RelevancePortType
*/
@WebEndpoint(name = "RelevancePort")
public RelevancePortType getRelevancePort(WebServiceFeature... features) {
return super.getPort(new QName("http://schemas.bigfix.com/Relevance", "RelevancePort"), RelevancePortType.class, features);
}
/**
*
* @return
* returns UserManagementPortType
*/
@WebEndpoint(name = "UserManagementPort")
public UserManagementPortType getUserManagementPort() {
return super.getPort(new QName("http://schemas.bigfix.com/Relevance", "UserManagementPort"), UserManagementPortType.class);
}
/**
*
* @param features
* A list of {@link javax.xml.ws.WebServiceFeature} to configure on the proxy. Supported features not in the <code>features</code> parameter will have their default values.
* @return
* returns UserManagementPortType
*/
@WebEndpoint(name = "UserManagementPort")
public UserManagementPortType getUserManagementPort(WebServiceFeature... features) {
return super.getPort(new QName("http://schemas.bigfix.com/Relevance", "UserManagementPort"), UserManagementPortType.class, features);
}
/**
*
* @return
* returns DashboardVariablePortType
*/
@WebEndpoint(name = "DashboardVariablePort")
public DashboardVariablePortType getDashboardVariablePort() {
return super.getPort(new QName("http://schemas.bigfix.com/Relevance", "DashboardVariablePort"), DashboardVariablePortType.class);
}
/**
*
* @param features
* A list of {@link javax.xml.ws.WebServiceFeature} to configure on the proxy. Supported features not in the <code>features</code> parameter will have their default values.
* @return
* returns DashboardVariablePortType
*/
@WebEndpoint(name = "DashboardVariablePort")
public DashboardVariablePortType getDashboardVariablePort(WebServiceFeature... features) {
return super.getPort(new QName("http://schemas.bigfix.com/Relevance", "DashboardVariablePort"), DashboardVariablePortType.class, features);
}
private static URL __getWsdlLocation() {
if (WEBREPORTSSERVICE_EXCEPTION!= null) {
throw WEBREPORTSSERVICE_EXCEPTION;
}
return WEBREPORTSSERVICE_WSDL_LOCATION;
}
}
Lösung gefunden:
Das war viel einfacher, als ich dachte die WSDL-Generation hat die ganze Arbeit gemacht. So verwenden Sie diese generierten Klassen.
Paket connect.tivoli;
public class testMain {
public static void main(String[] args) {
String relevanceQuery ="names of bes computers ";
WebReportsService wr = new WebReportsService();
RelevancePortType client;
client = wr.getPort(RelevancePortType.class);
System.out.println(client.getRelevanceResult(relevanceQuery, "ad\\username", "password"));
}
Sie sollten Port prom Ihr Service‘Klasse (WebReportsService glaube ich) mit getPort() -Methode, dann erhalten, wenn Sie Port (zB Endpunkt) Implementierungsobjekt erhalten können Sie anrufen beliebige Web-Service-Endpunktmethoden. Verwenden Sie ObjectFactory, um benötigte Objekte zu erstellen. Beliebte Client-Bibliotheken sind JAX-WS (in JRE6 + enthalten) oder CXF (von Apache). –
Ich würde gerne von einem leichten SOAP-Client in Java hören. Apache CXF ist, was wir verwenden, und es ist totale Bloatware. – dnault
Haben Sie gesehen? –
deepakborania