我对webservice世界相对来说是个新手,我的研究似乎让我困惑而不是启发,我的问题是我得到了一个库(jar),我必须用一些webservice功能来扩展它。
这个库将共享给其他开发人员,在jar中的类中,将有一个调用webservice的方法的类(该方法实质上设置类的属性,执行一些业务逻辑,如将对象存储在db中等,并将对象与这些修改一起发回)。我希望对这个服务的调用尽可能简单,希望尽可能简单,这样使用类的开发人员只需要做。
Car c = new Car("Blue");
c.webmethod();
我一直在研究如何在服务器上使用JAX-WS,但在我看来,我不需要在服务器上创建WSimPort
,也不需要在客户端上创建WSimPort
,因为我知道这两者都有类,我只需要在服务器和客户端中共享的类之间进行一些交互。您认为如何在类中执行webservice和调用是有意义的?
我理解您的问题归结为如何从Java调用SOAP(JAX-WS)web服务并获取其返回对象。在这种情况下,您有两种可能的方法:
wsimport
生成Java类并使用它们;或
关于第一种方法(使用WSimPort
):
不过,恐怕在这种情况下,你只能要么:
wsimport
生成的代码,使其使用您的业务类(这很困难,而且不值得这样做--请记住,每次WSDL更改时,您都必须重新生成和重新调整代码);或WSimPort
生成的类。(在此解决方案中,业务代码可以从另一个体系结构层“使用”生成的类作为服务。)关于第二种方法(创建自定义SOAP客户端):
使用经典的java.net.HTTPURLConnection
创建SOAP客户机并不是那么难(但也不是那么简单),您可以在此链接中找到一个非常好的起始代码。
我建议您使用SAAJ框架:
SOAP with Attachments API for Java(SAAJ)主要用于直接处理SOAP请求/响应消息,这种消息发生在任何Web服务API的幕后。它允许开发人员直接发送和接收soap消息,而不是使用JAX-WS。
请参阅下面的工作示例(运行它!)使用SAAJ调用SOAP web服务。它调用此web服务。
import javax.xml.soap.*;
public class SOAPClientSAAJ {
// SAAJ - SOAP Client Testing
public static void main(String args[]) {
/*
The example below requests from the Web Service at:
https://www.w3schools.com/xml/tempconvert.asmx?op=CelsiusToFahrenheit
To call other WS, change the parameters below, which are:
- the SOAP Endpoint URL (that is, where the service is responding from)
- the SOAP Action
Also change the contents of the method createSoapEnvelope() in this class. It constructs
the inner part of the SOAP envelope that is actually sent.
*/
String soapEndpointUrl = "https://www.w3schools.com/xml/tempconvert.asmx";
String soapAction = "https://www.w3schools.com/xml/CelsiusToFahrenheit";
callSoapWebService(soapEndpointUrl, soapAction);
}
private static void createSoapEnvelope(SOAPMessage soapMessage) throws SOAPException {
SOAPPart soapPart = soapMessage.getSOAPPart();
String myNamespace = "myNamespace";
String myNamespaceURI = "https://www.w3schools.com/xml/";
// SOAP Envelope
SOAPEnvelope envelope = soapPart.getEnvelope();
envelope.addNamespaceDeclaration(myNamespace, myNamespaceURI);
/*
Constructed SOAP Request Message:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:myNamespace="https://www.w3schools.com/xml/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<myNamespace:CelsiusToFahrenheit>
<myNamespace:Celsius>100</myNamespace:Celsius>
</myNamespace:CelsiusToFahrenheit>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
*/
// SOAP Body
SOAPBody soapBody = envelope.getBody();
SOAPElement soapBodyElem = soapBody.addChildElement("CelsiusToFahrenheit", myNamespace);
SOAPElement soapBodyElem1 = soapBodyElem.addChildElement("Celsius", myNamespace);
soapBodyElem1.addTextNode("100");
}
private static void callSoapWebService(String soapEndpointUrl, String soapAction) {
try {
// Create SOAP Connection
SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory.newInstance();
SOAPConnection soapConnection = soapConnectionFactory.createConnection();
// Send SOAP Message to SOAP Server
SOAPMessage soapResponse = soapConnection.call(createSOAPRequest(soapAction), soapEndpointUrl);
// Print the SOAP Response
System.out.println("Response SOAP Message:");
soapResponse.writeTo(System.out);
System.out.println();
soapConnection.close();
} catch (Exception e) {
System.err.println("\nError occurred while sending SOAP Request to Server!\nMake sure you have the correct endpoint URL and SOAPAction!\n");
e.printStackTrace();
}
}
private static SOAPMessage createSOAPRequest(String soapAction) throws Exception {
MessageFactory messageFactory = MessageFactory.newInstance();
SOAPMessage soapMessage = messageFactory.createMessage();
createSoapEnvelope(soapMessage);
MimeHeaders headers = soapMessage.getMimeHeaders();
headers.addHeader("SOAPAction", soapAction);
soapMessage.saveChanges();
/* Print the request message, just for debugging purposes */
System.out.println("Request SOAP Message:");
soapMessage.writeTo(System.out);
System.out.println("\n");
return soapMessage;
}
}
问题内容: 我正在使用GWT作为Web开发框架。我需要从我的GWT客户端代码访问一些REST服务。我还需要解析JSON(或XML),这是这些服务的响应格式。哪个是解决此问题的最佳方法? 提前致谢。 问题答案: 您可以使用标准GWT调用REST服务(或者如果需要在另一个域上调用服务)。 随着JSON响应字符串,你可以调用获得,它可以是一个,等等,这是在所有可用的这个包。
问题内容: 我有一个使用Python的scikit- learn训练的分类器。如何使用Java程序中的分类器?我可以使用Jython吗?有什么方法可以在Python中保存分类器并在Java中加载分类器?还有其他使用方式吗? 问题答案: 您不能使用jython,因为scikit- learn非常依赖numpy和scipy,它们具有许多已编译的C和Fortran扩展,因此无法在jython中工作。 在
问题内容: 我正在尝试做一个简单的Jform,并从另一个类中调用它。我想在服务器客户端应用程序中使用此Jframe,但是我不知道如何从另一个类打开JFrame类。 就像用户必须选择 1-打开Jframe。 2-退出。 那么我在做什么错呢? 以下是代码: 名为Calculas.java的Jframe类 名为Test.java的测试类 问题答案: 如果这很天真,请原谅我,因为我不是Java程序员的任何
问题内容: 我在Java项目中使用Jython。 我有一个Java类:和一个Python类: Python文件如下: 现在的问题是我想从Java文件的方法调用Python文件的方法并打印结果。 问题答案: 如果我没看错文档,则可以使用以下功能: 或者,如果您想获取字符串: 如果要向其提供Java变量的某些输入,则可以预先使用,而不要在Python代码中使用该变量名:
问题内容: 我在此类的构造函数中有一个noraml java类,说ReceivedChat.java,我想调用Android的Activity。 我的活动课是。 该程序不起作用。它不是在调用我的班级的onCreate。对我有任何帮助。 问题答案: 如何从普通的Java类调用Activity类 您需要在通过活动或任何其他应用程序组件创建对象时,将当前活动上下文传递给: 而不是从Constructor
问题内容: 如何从Java调用GraphViz,以及如何使用Java调用GraphViz函数?为了访问用于构建点图的GraphViz库,必须包含哪些必需的jar文件?是否有用于生成点图的示例程序 问题答案: 检查此 API,它很简单,并且具有几种输出格式(即pdf gif ..etc)。 编辑2016年5月: 许多人评论说该API不再可用;这里是其源代码: 首先,您需要创建并复制以下文件,然后粘贴