2013-07-14 30 views
0

我開始學習Java Web服務,後面的書「Java Web服務:啓動和運行」。 在本書的某些章節中,作者談論了一些xsd部分。 問題是,當我嘗試代碼,當我生成WSDL時,我沒有得到這些部分。Java WS:XSD部分在哪裏?

這裏是一個WS實現的例子:

import java.awt.Image; 
import java.io.ByteArrayInputStream; 
import java.io.ByteArrayOutputStream; 
import java.io.FileInputStream; 
import java.io.IOException; 
import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.Iterator; 
import java.util.List; 
import java.util.Map; 
import java.util.Set; 

import javax.imageio.ImageIO; 
import javax.imageio.ImageReader; 
import javax.imageio.stream.ImageInputStream; 
import javax.jws.WebMethod; 
import javax.jws.WebService; 

@WebService(serviceName = "SkiImageService") 
// @HandlerChain(file = "../handlers/handler-chain.xml") 
public class SkiImageService { 
    private static final String[] names = {"nordic.jpg", "tele.jpg", "alpine.jpg"}; 
    private String default_key; 
    private Map<String, String> photos; 

    public SkiImageService() { 
    photos = new HashMap<String, String>(); 
    photos.put("nordic", "nordic.jpg"); 
    photos.put("alpine", "alpine.jpg"); 
    photos.put("telemk", "telemk.jpg"); 
    default_key = "nordic"; 
    } 

    // Create a named image from the raw bytes. 
    private Image createImage(String name) { 
    byte[] bytes = getRawBytes(name); 
    ByteArrayInputStream in = new ByteArrayInputStream(bytes); 
    Iterator iterators = ImageIO.getImageReadersByFormatName("jpeg"); 
    ImageReader iterator = (ImageReader) iterators.next(); 
    try { 
     ImageInputStream iis = ImageIO.createImageInputStream(in); 
     iterator.setInput(iis, true); 
     return iterator.read(0); 
    } catch (IOException e) { 
     System.err.println(e); 
     return null; 
    } 
    } 

    // Create a list of all available images. 
    private List<Image> createImageList() { 
    List<Image> list = new ArrayList<Image>(); 
    Set<String> key_set = photos.keySet(); 
    for (String key : key_set) { 
     Image image = createImage(key); 
     if (image != null) { 
     list.add(image); 
     } 
    } 
    return list; 
    } 

    // Returns one image given the image's name. 
    @WebMethod 
    public Image getImage(String name) { 
    return createImage(name); 
    } 

    // Returns a list of all available images. 
    @WebMethod 
    public List<Image> getImages() { 
    return createImageList(); 
    } 

    // Read the bytes from the file for one image. 
    @SuppressWarnings("unused") 
    private byte[] getRawBytes(String name) { 
    ByteArrayOutputStream out = new ByteArrayOutputStream(); 
    try { 
     String cwd = System.getProperty("user.dir"); 
     String sep = System.getProperty("file.separator"); 
     String base_name = cwd + sep + "jpegs" + sep; 
     String file_name = base_name + name + ".jpg"; 
     FileInputStream in = new FileInputStream(file_name); 

     // Send default image if there's none with this name. 
     if (in == null) { 
     in = new FileInputStream(base_name + "nordic.jpg"); 
     } 
     byte[] buffer = new byte[2048]; 
     int n = 0; 
     while ((n = in.read(buffer)) != -1) { 
     out.write(buffer, 0, n); // append to ByteArrayOutputStream 
     } 
     in.close(); 
    } catch (IOException e) { 
     System.err.println(e); 
    } 
    return out.toByteArray(); 
    } 

} 

當我看着我的WSDL,我不覺得以下幾點:

<xs:complexType name="getImagesResponse"> 
    <xs:sequence> 
     <xs:element name="return" type="xs:base64Binary" minOccurs="0" maxOccurs="unbounded"></xs:element> 
    </xs:sequence> 
</xs:complexType> 

<xs:complexType name="getImageResponse"> 
    <xs:sequence> 
     <xs:element name="return" type="xs:base64Binary" minOccurs="0"></xs:element> </xs:sequence> 
</xs:complexType> 

我在哪裏可以找到XSD文件/部分?

Regards,

Mick。

回答

0

你會想看看WSDL的類型部分(靠近頂部)。例如,以下是我正在處理的項目的WSDL部分:

<types> 
    <xsd:schema> 
    <xsd:import schemaLocation="http://localhost:8080/FloeClient/localFiles?xsd=1" namespace="http://app.client.floe.iceberg.com/"/> 
    </xsd:schema> 
</types> 

請注意xsd引用。如果我打開該URL,我會看到XSD。在您的WSDL中查找xsd:import語句。

大多數WSDL生成器都會包含一個XSD。但它不一定。對於在WSDL中定義的所有類型都是完全有效的。所以如果你沒有對XSD的引用,那不是一個錯誤。

+0

非常感謝。那是我想知道的。 – Mick