gpt4 book ai didi

java - Java soap调用以将.XML文件传递给WebService

转载 作者:数据小太阳 更新时间:2023-10-29 02:53:29 41 4
gpt4 key购买 nike

所以我对整个soap和服务器概念还不熟悉。我把一个基本的jax-rpc和jax-ws组合在一起。我总的来说想把一个.xml文件传递给一个web服务,接收一个响应,并将其写入一个目录。我从哪里开始,应该使用什么,在哪里可以找到基于它的教程/信息。谢谢您!

最佳答案

实际上,在设计web服务时可以采用两种方法。自上而下和自下而上的方法。我将给你一个简单的解释,这两种方法及其兴衰。还有一些教程的链接。
自顶向下:
在自顶向下的方法中,首先要对xsd进行建模,xsd将包含您的请求和响应消息以及这些请求和响应将使用的数据结构。然后对操作进行建模,即在客户机和服务之间流动的请求和响应,最后将其组合成wsdl。然后将生成的wsdl导入到ide中,如netbeans或eclipse,然后开始编写服务的内部代码。
例如,假设您有一个产品服务。在此服务中,您希望创建一个操作,该操作将基于产品代码搜索特定产品。因此,您需要查询产品服务中的产品对象。服务将被调用ProductService,操作将被调用GetProduct
要实现这一点,您需要对一个具有两个字符串属性的产品对象建模,这两个属性称为描述和代码。您还需要为GetProductRequest消息和GetProductResponse消息建模。
这可能具有以下结构:
xsd的代码如下所示:

<?xml version="1.0" encoding="utf-8" ?>
<xs:schema xmlns="http://www.wsexample.com/ProductService_V1/Product"
elementFormDefault="qualified"
targetNamespace="http://www.wsexample.com/ProductService_V1/Product"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="ProductCode_Type">
<xs:annotation>
<xs:documentation>This the product code type. It is based on the string data type it must be 8 characters long.
</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:minLength value="8" />
<xs:maxLength value="8" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="ProductDescription_Type">
<xs:annotation>
<xs:documentation>This is the base class for the product description field. This is a text field up to 255 characters long.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:maxLength value="255" />
</xs:restriction>
</xs:simpleType>
<xs:complexType name="Product_Type">
<xs:annotation>
<xs:documentation>This is the product base class it is used to perform CRUD operations with on all of the product service operations.
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="ProductCode"
type="ProductCode_Type"
minOccurs="1"
maxOccurs="1" />
<xs:element name="ProductDescription"
type="ProductDescription_Type"
minOccurs="0"
maxOccurs="1" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="GetProductRequest_Type">
<xs:annotation>
<xs:documentation>This is the base class for the Get Product Request message. In the message you must pass one and only one product code which to search for. </xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="Product"
type="Product_Type" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="GetProductResponse_Type">
<xs:annotation>
<xs:documentation>This is the get product response message and will contain the result of the results of calling the getproductdescription operation on the Product service.
It will contain a product code which was passed in the Get Product Request message and optionally return one description.</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="Product"
type="Product_Type" />
</xs:sequence>
</xs:complexType>
<xs:element name="GetProductRequest"
type="GetProductRequest_Type" />
<xs:element name="GetProductResponse"
type="GetProductResponse_Type" />
</xs:schema>

现在需要创建一个新的wsdl来描述服务,并在这个wsdl中使用这个xsd(我称之为product.xsd)。如您所见,我们已经建模了数据结构来传输产品对象,并且我们已经建模了服务中使用的操作。
那么,我们的wsdl可能如下所示:
这是wsdl的代码
<?xml version="1.0" encoding="utf-8"?>

<wsdl:definitions name="ProductService"
targetNamespace="http://wsexample.com/ProductService"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
xmlns:tns="http://wsexample.com/ProductService"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:ProductData="http://www.wsexample.com/Product/ProductData">
<wsdl:types>
<xs:schema elementFormDefault="qualified"
targetNamespace="http://wsexample.com/ProductService">
<xs:import schemaLocation="Product.xsd"
namespace="http://www.wsexample.com/Product/ProductData" />
</xs:schema>
</wsdl:types>
<wsdl:message name="GetProduct">
<wsdl:part name="in"
element="ProductData:GetProductRequest" />
</wsdl:message>
<wsdl:message name="GetProductRs">
<wsdl:part name="out"
element="ProductData:GetProductResponse" />
</wsdl:message>
<wsdl:portType name="ProductEndPoint">
<wsdl:operation name="GetProduct">
<wsdl:input message="tns:GetProduct" />
<wsdl:output message="tns:GetProductRs" />
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="ProductServiceBinding"
type="tns:ProductEndPoint">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http"
style="document" />
<wsdl:operation name="GetProduct">
<wsdl:input>
<soap:body parts="in"
use="literal" />

</wsdl:input>
<wsdl:output>
<soap:body parts="out"
use="literal" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="ProductEndpointService">
<wsdl:port name="ProductServiceEndPointPort"
binding="tns:ProductServiceBinding">
<soap:address location="http://wsexample.com/ProductService" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

因此,在对将在客户端和服务器之间流动的消息进行建模之后,将如下所示:
请求:
 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"   xmlns:prod="http://www.wsexample.com/Product/ProductData">
<soapenv:Header/>
<soapenv:Body>
<prod:GetProductRequest>
<prod:Product>
<prod:ProductCode>12345678</prod:ProductCode>

</prod:Product>
</prod:GetProductRequest>
</soapenv:Body>
</soapenv:Envelope>

回应:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:prod="http://www.wsexample.com/Product/ProductData">
<soapenv:Header/>
<soapenv:Body>
<prod:GetProductResponse>
<prod:Product>
<prod:ProductCode>12345678</prod:ProductCode>
<!--Optional:-->
<prod:ProductDescription>A Basic product for kids to teach them how to count. </prod:ProductDescription>
</prod:Product>
</prod:GetProductResponse>
</soapenv:Body>
</soapenv:Envelope>

现在,您可以使用wsdl和xsd来使用 Netbeans tutorial and guide.实现web服务。它非常简单,只需在netbeans中启动一个新的web项目,然后右键单击该项目并添加新文件,然后从wsdl文件中选择web服务。
请参见下面的屏幕截图:
自上而下摘要:
自上而下需要你做很多前期的建模和规划。但是你完全可以控制。这允许您决定数据将如何在客户机和服务器之间流动。它允许您根据自己的具体要求修改所有内容。然而,这需要大量的工作前手。
我最大的好处是可以设计一个wsdl和xsd,将数据从提供系统抽象为更通用的东西。这在集成项目中变得很重要。
自下而上:
自下而上方法允许您从Java代码中生成上面创建的工件。这里有一个 excellent tutorial会告诉你所有的细节。然而,Java允许您向类添加注释,然后将类及其方法公开为Web服务。
因此,通过获取类并添加注释,您可以将该类转换为web服务。请参阅下面的代码,以获取一个快速而肮脏的示例:
@Webservice
public Class CalculatorWS
{

@WebMethod
public int add(@WebParam(name = "i") int i, @WebParam(name = "j") int j) {
int k = i + j;
return k;
}
}

如果您遵循本教程,您可能会在几分钟内从代码转到完全工作的web服务。又快又容易。
自下而上的总结:
您几乎无法控制wsdl和xsd的外观和行为。在某些情况下,这种方法会将您紧密地绑定到底层模型。这真的取决于你如何编码。因此,使用自下而上的方法,你可以在几分钟内得到一个原型,但上下流动的信息可能并不是你所想的那样。
重要提示:
下载一个soapui副本,它确实是测试甚至创建模拟服务的最佳工具。如果你真的想使用web服务,那么现在就开始吧。
希望这能帮到你。

关于java - Java soap调用以将.XML文件传递给WebService,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23787049/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com