Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 解组时出现意外元素_Java_Xml_Jaxb_Xsd_Unmarshalling - Fatal编程技术网

Java 解组时出现意外元素

Java 解组时出现意外元素,java,xml,jaxb,xsd,unmarshalling,Java,Xml,Jaxb,Xsd,Unmarshalling,我必须从网络服务中获取信息。下面是一个响应示例: <myServices> <myService name="A" serviceId="a" type="rest" version="1.0"> <entryPoints/> </myService> <myService name="B" serviceId="b" type="rest" version="1.0"> <entryPoints/> </myServ

我必须从网络服务中获取信息。下面是一个响应示例:

<myServices>
<myService name="A" serviceId="a" type="rest" version="1.0">
<entryPoints/>
</myService>
<myService name="B" serviceId="b" type="rest" version="1.0">
<entryPoints/>
</myService>
<myService name="C" serviceId="C" type="rest" version="1">
<entryPoints>
<entryPoint realm="external" wadl="http://myURL.com/1/app.wadl>http://myURL.com/1</entryPoint>
</entryPoints>
</myService>
<myService name="D" serviceId="d" type="rest" version="1.0">
<entryPoints/>
</myService>
</myServices>

应用命名空间
在输入XML没有名称空间的情况下,可以利用SAX
XMLFilter
应用名称空间

import org.xml.sax.*;
导入org.xml.sax.helpers.XMLFilterImpl;
公共类NamespaceFilter扩展了XMLFilterImpl{
私有静态最终字符串命名空间=”http://www.nisoars.myservices.1.com/";
@凌驾
公共void endElement(字符串uri、字符串localName、字符串qName)
抛出SAX异常{
endElement(名称空间、localName、qName);
}
@凌驾
public void startElement(字符串uri、字符串localName、字符串qName、,
属性(atts)引发SAXException{
startElement(名称空间、localName、qName、atts);
}
}
拆封 解组处理是利用JAXB的
UnmarshallerHandler
作为
ContentHandler

import javax.xml.bind.*;
导入javax.xml.parsers.*;
导入org.xml.sax.*;
公开课演示{
公共静态void main(字符串[]args)引发异常{
//创建JAXBContext
JAXBContext jc=JAXBContext.newInstance(Customer.class);
//创建XMLFilter
XMLFilter filter=新名称空间过滤器();
//在XMLFilter上设置父XMLReader
SAXParserFactory spf=SAXParserFactory.newInstance();
SAXParser sp=spf.newSAXParser();
XMLReader xr=sp.getXMLReader();
filter.setParent(xr);
//在XMLFilter上将UnmarshallerHandler设置为ContentHandler
Unmarshaller Unmarshaller=jc.createUnmarshaller();
解组器handler解组器handler=解组器
.getUnmarshallerHandler();
setContentHandler(解组器Handler);
//解析XML
InputSource xml=新的InputSource(“input.xml”);
parse(xml);
Customer=(Customer)unmarshallerHandler.getResult();
//将客户对象封送回XML
Marshaller=jc.createMarshaller();
setProperty(marshaller.JAXB_格式化的_输出,true);
marshaller.marshall(客户、系统、输出);
}
}
更多信息
<?xml version="1.0" encoding="windows-1252" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns="http://www.nisoars.myservices.1.com"
            targetNamespace="http://www.nisoars.myservices.1.com"
            elementFormDefault="qualified">

    <xsd:element name="myServices">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="myService" type="ServiceType" minOccurs="1" maxOccurs="unbounded"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>  

    <xsd:complexType name="ServiceType">
        <xsd:sequence>
            <xsd:element name="entryPoints">
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:element name="entryPoint" type="EntryPointType" minOccurs="1" maxOccurs="unbounded"/>
                    </xsd:sequence>
                </xsd:complexType>
            </xsd:element>
        </xsd:sequence>
        <xsd:attribute name="name" type="xsd:string" use="required"/>
        <xsd:attribute name="serviceId" type="xsd:string" use="required"/>
        <xsd:attribute name="type" type="ServiceTypeEnum" use="required"/>
        <xsd:attribute name="version" type="xsd:string" use="required"/>
    </xsd:complexType>

    <!-- <entryPoint wadl="myWadl" realm="external">myURL</entryPoint> -->
    <xsd:complexType name="EntryPointType">
        <xsd:simpleContent>
            <xsd:extension base="xsd:anyURI">
                <xsd:attribute name="realm" type="RealmEnum" use="required"/>
                <xsd:attribute name="wadl" use="optional" type="xsd:anyURI"/> <!-- Required for REST endpoints, but not for SOAP -->
            </xsd:extension>
        </xsd:simpleContent>
    </xsd:complexType>


    <xsd:simpleType name="RealmEnum">
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="internal"/>
            <xsd:enumeration value="external"/>
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="ServiceTypeEnum">
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="rest"/>
            <xsd:enumeration value="soap"/>
        </xsd:restriction>
    </xsd:simpleType>
</xsd:schema>