jsp上传到webservice_java写webservice接口

有一个需求:要求根据设备mac和终端设备类型来查询设备库存状态。

接口协议是采用webservice协议,信息交互方式为xml格式信息

输入参数存放到XML各个节点下,并转为一个String,作为接口的输入参数。XML的封装格式如下所示:

< DEVICE_MAC> DEVICE_MAC>

< DEVICE_TYPE> DEVICE_TYPE>

输出参数存放到XML各个节点下,并转为一个String,作为接口的输出参数。XML的封装格式如下所示:

< RESULT_CODE >返回编码 RESULT_CODE >

< RESULT_MSG >失败描述 RESULT_MSG >

终端状态

终端是否存在

终端归属地市

webservice也就是web服务,是一种跨平台跨语言的服务,类似就是一个第三方的服务,你写好接口让别人来调用,你是提供服务的一方。接口都是用来提供服务的,接口就是一组功能的集合。

在java中写webservice接口,需要在接口类上标注@WebService注解,表明这是一个webservice,@WebParam(name = "DEVICE_MAC")这个注解标注在方法参数上,表示获取的参数,注释用于定制从单个参数至 Web Service 消息部件和 XML 元素的映射。

例如:

@WebService

public interface qryIptvStateService {

//根据设备mac和设备类型查询库存状态信息

String qryIptvState(@WebParam(name = "DEVICE_MAC") String DEVICE_MAC);

}

现在实现这个接口

endpointInterface: 服务接口全路径, 指定做SEI(Service EndPoint Interface)服务端点接口

serviceName:表示对外发布的服务名(也就是接口文档中的方法名),指定 Web Service 的服务名称:wsdl:service。缺省值为 Java 类的简单名称 + Service。

@WebService(endpointInterface = "intf.zznode.device.qryIptvStateService", serviceName = "qryIptvState")

public class qryIptvStateServiceImpl extends BaseService implements qryIptvStateService {

@Override

public String qryIptvState(String xml) {

//业务代码

}

}

现在开始使用java构建xml文档节点

例如要构建这样结构的xml文档

< DEVICE_MAC> DEVICE_MAC>

< DEVICE_TYPE> DEVICE_TYPE>

主要的作用就是便于java对象与xml文件节点元素之间的转换

@XmlRootElement(name = "ROOT")将这个注解标注在java类上,表示这个是xml文档的根元素,名字为ROOT。

@XmlRootElement(name = "ROOT")

public class ROOTStoreInfo {

//root下面的msg_content元素

private StoreMsgContent MSG_CONTENT;

//setter/getter方法

}

public class StoreMsgContent {

private String DEVICE_MAC;

private String DEVICE_TYPE;

//setter/getter方法

}

最终构建出来的xml文档为

< DEVICE_MAC> DEVICE_MAC>

< DEVICE_TYPE> DEVICE_TYPE>

//最后需要将传入的xml格式的字符串映射解析为java类

public static T xml2Object(String xmlStr, Class c) {

try {

// JAXB(即Java Architecturefor XML Binding)是一个业界的标准,

//即是一项可以根据XML Schema产生Java类的技术。

//该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,

//并能将Java对象树的内容重新写到XML实例文档。

JAXBContext context = JAXBContext.newInstance(c);

Unmarshaller unmarshaller = context.createUnmarshaller();

T t = (T) unmarshaller.unmarshal(new StringReader(xmlStr));

return t;

} catch (JAXBException e) {

e.printStackTrace();

return null;

}

}

现在能够实现用java类构建xml格式的文档节点信息,并且能将传入的字符形式的xml格式数据映射为标注了@XmlRootElement的类。

现在需要将操作结果返回。

//用于响应返回的xml文档信息

//@XmlType 注解 propOrder的值是一个字符串数组,用来设置xml文档节点的顺序

@XmlRootElement(name = "ROOT")

@XmlType(propOrder = {"RESULT_CODE", "RESULT_MSG", "STATE", "IS_EXIST", "OWNER_CITY","OTT_STB_ID"})

public class ROOTStoreInfoRespone {

private String RESULT_CODE;//返回编码:1成功,0失败

private String RESULT_MSG;//失败描述,RESULT_CODE为0必填

private String STATE;//终端设备状态,RESULT_CODE为1必填

private String IS_EXIST;//终端设备是否存在:1存在,0不存在

private String OWNER_CITY;//终端归属地市,IS_EXIST为1时必填

private String OTT_STB_ID;//OTT序列号sn

//setter/getter方法

}

//用于将java类转换为xml格式

public static String getXml(ROOTStoreInfoRespone root) {

StringWriter wr = new StringWriter();

try {

//JAXBContext将java类与xml文档相互转换

JAXBContext context = JAXBContext.newInstance(ROOTStoreInfoRespone.class);

//使用Marshaller生成xml文件

Marshaller mar = context.createMarshaller();

//格式化xml格式

mar.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

//去掉生成xml的默认报文头

// mar.setProperty(Marshaller.JAXB_FRAGMENT, true);

mar.marshal(root, wr);

return wr.toString().replace("standalone=\"yes\"", "");

} catch (JAXBException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return null;

}

//调用

getXml(rootStoreInfoRespone)

总结:

java写webservice部分

@WebService该注解用于对接口,类进行注解,表示要发布的web服务。

它的属性(不全):

serviceName:表示发布的服务名称(通常为接口中的方法名称)

endpointInterface:表示发布服务的接口,采用类路径表示。

@WebParam(name = "DEVICE_MAC")表示方法的参数,注解用于标注参数,这个参数和传入的xml节点元素名相同,值为这个节点的值。

@WebResult表示方法的返回值

加上这两个注解 方法参数以及方法返回值将跟注解保持一致

如果不加,则wdsl中的参数是org01递增的,返回为return

java构建和解析xml部分

@XmlRootElement(name = "ROOT")将这个注解标注在java类上,表示这个是xml文档的根元素,名字为ROOT。这个类里面的属性即为xml中的节点元素。

@XmlType(propOrder = {"RESULT_CODE", "RESULT_MSG", "STATE", "IS_EXIST", "OWNER_CITY","OTT_STB_ID"})表示是xml类型。

propOrder 是一个字符数组,表示的是xml中节点元素的先后顺序。

xml格式的字符串映射为java类

将java类解析为xml文档格式。

主要是这次开发任务做了一个这样的需求,特此记录一下,对于webservice还不是很熟悉,还需要加强学习。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JSPJavaServer Pages)是一种动态网页技术,它允许在服务器端处理客户端请求并生成HTML内容。如果你想要在JSP页面上调用Web服务接口(通常称为WebService),你可以按照以下步骤操作: 1. **导入所需库**:在JSP文件中,你需要引入`java.net.*` 或 `javax.xml.rpc.*` 这样的库,它们包含了处理SOAP(简单对象访问协议)或RESTful Web服务所需的工具。 2. **创建URL**:首先,你需要构建一个指向Web服务的URL,这通常包含Web服务的地址、端口和路径。 ```jsp <%@ page import="java.net.URL" %> <%@ page import="javax.xml.rpc.ServiceException" %> ``` 3. **创建Service Stub**:使用`WSDL`(Web服务描述语言)文档,通过`javax.xml.rpc.jaxrpc.ServiceFactory` 创建一个服务代理(Service Stub)。这一步会将WSDL转换成本地Java类。 ```jsp URL url = new URL("http://your-service-url/service?wsdl"); QName serviceName = new QName("serviceNamespace", "serviceName"); Service service = ServiceFactory.create(url, serviceName); ``` 4. **调用Web服务方法**:现在可以使用创建的服务代理调用Web服务的方法了。假设有一个名为`getEmployeeData()`的方法,你可以像这样调用: ```jsp try { EmployeePortType port = (EmployeePortType) service.getPort(EmployeePortType.class.getName()); Employee employee = port.getEmployeeData(employeeId); } catch (MalformedURLException e) { // handle error } catch (ServiceException e) { // handle SOAP-related exceptions } ``` 5. **显示结果**:最后,在JSP页面上展示从Web服务获取的数据。 记得处理可能出现的异常,并确保网络连接可用。此外,为了更好地管理Web服务调用,可以考虑使用Spring框架提供的支持或者直接在Servlet层进行交互。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值