如何实现以xml格式接受请求的java webservice以及xml中的响应

时间:2016-03-16 10:37:08

标签: java web-services

我想创建Java webservice,它将接受xml格式的请求和xml中的响应。

我不想要字符串格式的xml。我的客户端是非Java技术(Ab-initio)。

请求/响应XML数据必须符合特定的xsd,它将作为操作的请求/响应类型在WSDL中。

即。 '类型' wsdl的元素。

如果有人对此有所了解,请分享。

WSDL created manually, which is importing xsd for request and response, My wsdl should generate as like this.

    <wsdl:types><xsd:schema targetNamespace="http://www.example.org/WS_WSDLFile/">

        <!-- Message request type from MessageRequest.xsd imported this is RS2 -->
        <xsd:import namespace="http://www.example.org/MessageRequest"
            schemaLocation="MessageRequest.xsd"></xsd:import>

        <!-- Message response type from MessageResponse.xsd imported this is ISO -->
        <xsd:import namespace="http://www.example.org/MessageResponse"
            schemaLocation="MessageResponse.xsd"></xsd:import>

    </xsd:schema>
</wsdl:types>

谢谢!

1 个答案:

答案 0 :(得分:0)

最后,我自己找到了这个问题的解决方案。 JAXB API在此解决方案中至关重要。

步骤:

1)我使用xsd(客户端将发送xml作为webmethod的参数)并使用cmd中的'XJC'工具创建Java类。

在命令提示符下执行命令

d:\ MyWorkSpace \ MyProject的&GT; xjc -d src MessageRequest.xsd

- 此命令执行将为请求xsd创建xml绑定classess。

d:\ MyWorkSpace \ MyProject的&GT; xjc -d src MessageResponse.xsd
- 此命令执行将为响应xsd创建xml绑定classess。

2)也使用XJC工具为响应创建了相同的Java类。

3)为请求&amp;创建java类之后响应xsds 开始创建JAX-WS实现。

注意:在我的情况下,'TX'是'MessageRequest.xsd'的根元素,'Document'是'MessageResponse.xsd'的元素

所以我的界面就是这个

@WebService
@SOAPBinding(style= Style.DOCUMENT,use= Use.LITERAL)
public interface MessageIntf 
{

	/*Interface which declaring  webmethod for webservice
	 * Webmethod accepting XMLObject of 'TX' class  as a request and returning also XMLObject of 'Document' class.
	 */
	@WebMethod(operationName="getISOMessage", action="http://localhost:8090/service/mService1")
	public Document getMessage(TX txObject); 
	
}

**我的实施班**

package pub.pkg;

import javax.jws.WebService;

import jax.serv.TX;
import iso.std.AcceptorBatchTransferV02;
import iso.std.CardPaymentBatchTransfer1;
import iso.std.Document;
import iso.std.Header3;

@WebService(endpointInterface="pub.pkg.MessageIntf")
public class MessImpl implements MessageIntf {

/*
This is a implementation class having implementation method  	
*/
	@Override
	public Document getMessage(TX txObject)    
	{
		JaxUnmarshaller jx = new JaxUnmarshaller();// creating object of JaxUnmarshaller class
		Document doc = jx.getXmlData(); // binding xml into XMLObject 
	
		return doc; // returning response xmlObject to client 
	}

}

我的端点发布商类:

package pub.pkg;



import javax.xml.ws.Endpoint;

public class MessagePublisher {

    public static void main(String[] args) {
        Endpoint.publish("http://localhost:8097/service/mService1", new MessImpl());
        System.out.println("Service Deployed Successfully...");

    }

}
  • 将Publisher类作为Java Application运行。 并检查上面网址上浏览器上的wsdl,这是在发布商类中给出的,附加“?wsdl”。

当量

http://localhost:8097/service/mService1?wsdl

  • 检查wsdl的类型元素。

以下是 clienside实施 ..我只提供主类,编组/解组请自行完成。

package com.client;

import iso.std.Document;

import java.net.URL;

import javax.xml.namespace.QName;
import javax.xml.ws.Service;

import jax.serv.TX;
import pub.pkg.MessageIntf;

public class WebClient 
{

	public static void main(String[] args) throws Exception {
 
	URL url = new URL("http://localhost:8097/service/mService1?wsdl"); // URL of webservice wsdl 
        QName qname = new QName("http://pkg.pub/", "MessImplService"); // Defining  namespace and service Name of webservice
 
        Service service = Service.create(url, qname); // creating service obj
 
       MessageIntf msgObj = service.getPort(MessageIntf.class); // catching the object from server in Interface 
 
     JaxUnmarshaller jx = new  JaxUnmarshaller();  // creating Unmarshller object
       TX txObject = jx.getXmlData(); // binding xml data in to  XML Object 
       Document domObject =  msgObj.getMessage(txObject); 
       /*  call the webservice method by passing  XMLobject and returning response XMLObject */ 
       
       new JaxMarshaller().createXML(domObject);
       // converting  xml object into actual xml  
       
       
       
 
    }
 

}